我这样做:
word.rstrip(s)
其中word和s是包含unicode字符的字符串。
我得到了这个:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
有一个错误报告,在某些Windows Django系统上发生此错误。但是,我的情况似乎与那种情况无关。
可能是什么问题?
编辑:代码是这样的:
def Strip(word):
for s in suffixes:
return word.rstrip(s)
答案 0 :(得分:4)
问题是s
是一个字节串,而word
是一个unicode字符串 - 所以,Python试图将s
转换为unicode字符串,以便rstrip
说得通。问题是,它假定s
以ASCII编码,但显然不是(因为它包含ASCII范围之外的字符)。
因此,由于您将其初始化为文字,因此通过在其前面加u
将其转换为unicode字符串非常容易:
suffixes = [u'ি']
会工作吗?当您添加更多后缀时,您需要在所有后缀之前单独使用u
。
答案 1 :(得分:3)
我想这是因为python2中的隐式转换。 它是在this document中解释的,但我建议你阅读whole presentation关于在python 2和3中处理unicode(以及为什么python3更好; - ))
所以,我认为你的问题的解决方案是在条带化之前强制解码字符串为utf8。
类似的东西:
def Strip(word):
word = word.decode("utf8")
for s in suffixes:
return word.rstrip(s.decode("utf8")
第二次尝试:
def Strip(word):
if type(word) == str:
word = word.decode("utf8")
for s in suffixes:
if type(s) == str:
s = s.decode("utf8")
return word.rstrip(s)