使用Python字符串处理函数时的UnicodeDecodeError

时间:2012-05-25 10:04:00

标签: python unicode internationalization

我这样做:

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)

2 个答案:

答案 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)