无法在Python 2.4中解码unicode字符串

2024-09-28 20:49:16 发布

您现在位置:Python中文网/ 问答频道 /正文

这是在Python2.4中。这是我的情况。我从数据库中提取一个字符串,它包含一个变音的“o”(\xf6)。此时,如果我运行type(value),它将返回str.I,然后尝试运行.decode('utf-8'),我将得到一个错误('utf8'编解码器无法解码位置1-4中的字节)。

实际上,我的目标是成功地使type(value)返回unicode。我找到一个earlier question 这有一些有用的信息,但从选择的答案似乎不适合我的例子。我在这里做错什么了吗?

下面是一些代码:

Name = 'w\xc3\xb6rner'.decode('utf-8')
file.write('Name: %s - %s\n' %(Name, type(Name)))

我从来没有真正进入write语句,因为它在第一个语句上失败。

谢谢你的帮助。

编辑:

我验证了DB的字符集是utf8。所以在我的代码中,我将'\xf6'改为'\xc3\xb6',失败仍然发生。“utf-8”和“utf8”有区别吗?

关于使用编解码器写入文件的提示很方便(我肯定会使用它),但在这种情况下,我只是为了调试而写入日志文件。


Tags: 文件代码name数据库valuetype编解码器情况
3条回答

您的字符串不是UTF8编码的。如果要将字符串“解码”为unicode,则字符串必须使用参数指定的编码。我试过了,效果很好:

print 'w\xf6rner'.decode('cp1250')

编辑

要将unicode字符串写入文件,可以使用编解码器模块:

import codecs
f = codecs.open("yourfile.txt", "w", "utf8")
f.write( ... )

指定输入/输出的编码和在整个代码中使用“unicode”字符串是很方便的,而无需考虑不同的编码。

So in my code to reproduce I changed '\xf6' to '\xc3\xb6', and the failure still occurs

不在第一行它不:

>>> 'w\xc3\xb6rner'.decode('utf-8')
u'w\xf6rner'

第二行将出错,尽管:

>>> file.write('Name: %s - %s\n' %(Name, type(Name)))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 7: ordinal not in range(128)

这完全是您所期望的,尝试将非ASCII Unicode字符写入字节流。如果使用Jiri建议的编解码器包装流,则可以直接编写Unicode,否则必须手动将Unicode字符串重新编码为字节。

更好的做法是,出于日志记录的目的,只需输出变量的repr()。那么您就不必担心Unicode字符、换行符或其他不需要的字符:

name= 'w\xc3\xb6rner'.decode('utf-8')
file.write('Name: %r\n' % name)

Name: u'w\xf6rner'

显然是1字节编码“在UTF-8中是”\xc3\xb6“。

编码可能是:

  • ISO-8859-1标准
  • ISO-8859-2标准
  • ISO-8859-13标准
  • ISO-8859-15标准
  • 温-1250
  • 温-1252

相关问题 更多 >