编码飞了,代码看不懂西里尔字母:
import requests
r = requests.get('https://geocode-maps.yandex.ru/1.x/?apikey=ваш ключ&format=json&geocode=37.611347,55.760241')
r.status_code
r.headers['content-type']
r.encoding
r.text
r.json()
print(r.json())
输出print r.text
错误时:
文件“C:\Python27\lib\encodings\cp437.py”,第 12 行,编码返回 codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 282-287: character映射到
在这个请求中,不应该有西里尔字母,
ваш ключ
它应该被替换为一个真正的 API 密钥形式25831ee5-7a21-1234-a091-f80c70bed08c
。这就是 Yandex 自己写的关于它的内容。PS 不要尝试使用提供的密钥,它是出于演示目的而提供的,不是有效的 API 密钥。
UnicodeEncodeError: 'charmap' codec can't encode characters in position 282-287: character maps to
输出时出错print
意味着输出字符无法以控制台配置的编码显示。在这种情况下,根据错误文本判断,您为控制台配置了 cp437 编码 - 这是一种英文编码,它不包含西里尔字母。通过将控制台编码更改为 Cyrillic(标准 - cp866)来解决该问题。这可以通过使用 regedit 编辑注册表项来完成
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
已经想通了。如this answer中所述,编码错误不是来自python,而是来自控制台使用的编码。所以修复它的方法是运行命令(在 Windows 上):
它将编码设置为 UTF-8,然后再次运行程序。或者,如果您像我一样使用过 pycharm,请转到 Settings > Editor > File Encodings 并相应地设置 IDE 和 Project 编码。