当我做
u','.join([u'\u4e8c\u6797', unicode(10)])
它失败了UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
。列表中的所有三个项目都是 unicode 类型。
为什么要尝试用 ascii 编码?我不希望它转换为 ascii 字符串。我该如何避免呢?
当我做
u','.join([u'\u4e8c\u6797', unicode(10)])
它失败了UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
。列表中的所有三个项目都是 unicode 类型。
为什么要尝试用 ascii 编码?我不希望它转换为 ascii 字符串。我该如何避免呢?
没有足够的信息,因为它可以正常工作,如下所示:
>>> u','.join([u'\u4e8c\u6797', unicode(10)])
u'\u4e8c\u6797,10'
但是我的水晶球说你正试图以某种方式打印它:
>>> print u','.join([u'\u4e8c\u6797', unicode(10)])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "D:\dev\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to <undefined>
原因是,至少在我的系统上,终端使用cp437
编码并且无法以该编码对 Unicode 字符进行编码。
或者更有可能写入文件或管道:
>>> with open('out.txt','w') as f:
... f.write(u','.join([u'\u4e8c\u6797', unicode(10)]))
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
文件必须被告知编码,例如 UTF-8,或者它们默认为 ASCII:
>>> import codecs
>>> with open('out.txt','w') as f:
... f.write(u','.join([u'\u4e8c\u6797', unicode(10)]).encode('utf8'))
...
>>> # SUCCESS!