Python 2序数不在连接范围内

时间:2013-06-28 03:59:58

标签: unicode python-2.x

当我这样做时

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字符串。我该如何避免呢?

1 个答案:

答案 0 :(得分:0)

信息不够,因为它显示的效果很好:

>>> 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!