帮助解决UnicodeEncodeError('ascii',u'Phase \ u2013 II',6,7,'序数不在范围内(128)')

时间:2010-04-22 07:10:30

标签: python

有问题 UnicodeEncodeError('ascii',u'Phase \ u2013 II',6,7,'序数不在范围内(128)') 基本上我在这里做的是从excel表读取值 和工作表包含此格式的地址

Phase- II

所以想知道如何改变。

somestring = u'Phase \u2013 II'

到str

感谢

`

1 个答案:

答案 0 :(得分:3)

Excel主要使用cp1252,所以试试这个:

>>> somestring.encode('cp1252', 'replace')
'Phase \x96 II'
>>> print somestring.encode('cp1252', 'replace')
Phase – II

这不会给你一个ascii字符串(因为你的unicode字符串包含它不能的非ascii字符),但它确实给你一个Excel将正确解释的字节字符串,例如你把它写入csv文件。

如果您只是想打印它以供显示,那么您需要知道用于显示文本的任何输出编码:我从空闲中复制了示例,至少在我的系统上显示cp1252,但是如果您在命令提示符下打印它可能有另一种编码生效。如果需要,请使用DOS chcp命令选择适当的编码,因为默认编码可能不支持该字符:

C:\>chcp
Active code page: 850

C:\>\python26\python
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> somestring = u'Phase \u2013 II'
>>> print somestring.encode('cp850', 'replace')
Phase ? II
>>>

使用'replace'参数进行编码意味着如果您设法获取任何无法解释为cp1252的字符,将被问号替换。