在 Python 中打印和写入 Unicode 字符
printing and writing Unicode characters in Python
我正在尝试将一些 Unicode 字符打印出来或写入文本文件,但 运行 出现错误。请指教,尝试 google 给了我一些提示,但那个错误ed也是..下面是我的代码..我在这里做错了什么..
我正在尝试最终使用 'requests' 并使用具有 Unicode 值的数据解析 JSON..
我正在尝试使用来自此 url
的请求解析 JSON
https://api.discogs.com/releases/7828220
try:
import requests
import json
url = 'https://api.discogs.com/releases/7828220'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' }
art = requests.get(url, headers=headers)
json_object = json.loads(art.text)
try:
print str(json_object['companies'][0][name])
except:
print "Genre list isn't defined"
{u'name': u'\u041e\u041e\u041e "\u041f\u0430\u0440\u0430\u0434\u0438\u0437"', u'entity_type': u'10', u'catno': u'PARAD-432', u'resource_url': u'https://api.discogs.com/labels/210403', u'id': 210403, u'entity_type_name': u'Manufactured By'}
这里 json_object['companies'][0][name] 有一些 Unicode 字符不会显示在命令行终端上,也不会写入具有所需输出的文件 (Unicode )
Actual output looks like "ООО "Парадиз"",
我怎样才能 python 解释这些值?
你的"bytes"已经是unicode了,所以应该不会出错。
>>> bytes = u'\xd0\x9e\xd0\x9e\xd0\x9e"\xd0\x9f\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xb7"'
>>> print unicode(bytes)
ÐÐÐ "ÐаÑадиз"
但是,如果您要将 python2 字符串/字节串(没有 u""
前缀)转换为 unicode,则默认编码为 ascii。
>>> bytes = '\xd0\x9e\xd0\x9e\xd0\x9e"\xd0\x9f\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xb7"'
>>> print unicode(bytes)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
此处使用的正确编码是 UTF8。您可以告诉 unicode()
使用哪种编码。
>>> print unicode(bytes, 'utf8')
ООО "Парадиз"
won't display on the command line terminal
你遇到了什么错误?无论如何,如果您删除不必要的 str()
转换并在支持 UTF-8 的终端上引用 'name'
,例如 Linux:
import requests
import json
url = 'https://api.discogs.com/releases/7828220'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' }
art = requests.get(url, headers=headers)
json_object = json.loads(art.text)
print json_object['companies'][0]['name']
输出:
ООО "Парадиз"
在 Windows 上,命令控制台可能不会默认使用支持您尝试打印的字符的编码。一种简单的方法是切换到受支持的编码,在这种情况下 chcp 1251
将代码页更改为支持俄语的代码页,并且将使上述工作正常进行。
要将其写入文件,请使用 io.open
和编码:
import io
with io.open('output.txt','w',encoding='utf8') as f:
f.write(json_object['companies'][0]['name'])
我正在尝试将一些 Unicode 字符打印出来或写入文本文件,但 运行 出现错误。请指教,尝试 google 给了我一些提示,但那个错误ed也是..下面是我的代码..我在这里做错了什么..
我正在尝试最终使用 'requests' 并使用具有 Unicode 值的数据解析 JSON..
我正在尝试使用来自此 url
的请求解析 JSONhttps://api.discogs.com/releases/7828220
try:
import requests
import json
url = 'https://api.discogs.com/releases/7828220'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' }
art = requests.get(url, headers=headers)
json_object = json.loads(art.text)
try:
print str(json_object['companies'][0][name])
except:
print "Genre list isn't defined"
{u'name': u'\u041e\u041e\u041e "\u041f\u0430\u0440\u0430\u0434\u0438\u0437"', u'entity_type': u'10', u'catno': u'PARAD-432', u'resource_url': u'https://api.discogs.com/labels/210403', u'id': 210403, u'entity_type_name': u'Manufactured By'}
这里 json_object['companies'][0][name] 有一些 Unicode 字符不会显示在命令行终端上,也不会写入具有所需输出的文件 (Unicode )
Actual output looks like "ООО "Парадиз"",
我怎样才能 python 解释这些值?
你的"bytes"已经是unicode了,所以应该不会出错。
>>> bytes = u'\xd0\x9e\xd0\x9e\xd0\x9e"\xd0\x9f\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xb7"'
>>> print unicode(bytes)
ÐÐÐ "ÐаÑадиз"
但是,如果您要将 python2 字符串/字节串(没有 u""
前缀)转换为 unicode,则默认编码为 ascii。
>>> bytes = '\xd0\x9e\xd0\x9e\xd0\x9e"\xd0\x9f\xd0\xb0\xd1\x80\xd0\xb0\xd0\xb4\xd0\xb8\xd0\xb7"'
>>> print unicode(bytes)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
此处使用的正确编码是 UTF8。您可以告诉 unicode()
使用哪种编码。
>>> print unicode(bytes, 'utf8')
ООО "Парадиз"
won't display on the command line terminal
你遇到了什么错误?无论如何,如果您删除不必要的 str()
转换并在支持 UTF-8 的终端上引用 'name'
,例如 Linux:
import requests
import json
url = 'https://api.discogs.com/releases/7828220'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' }
art = requests.get(url, headers=headers)
json_object = json.loads(art.text)
print json_object['companies'][0]['name']
输出:
ООО "Парадиз"
在 Windows 上,命令控制台可能不会默认使用支持您尝试打印的字符的编码。一种简单的方法是切换到受支持的编码,在这种情况下 chcp 1251
将代码页更改为支持俄语的代码页,并且将使上述工作正常进行。
要将其写入文件,请使用 io.open
和编码:
import io
with io.open('output.txt','w',encoding='utf8') as f:
f.write(json_object['companies'][0]['name'])