这是在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”有区别吗?
关于使用编解码器写入文件的提示很方便(我肯定会使用它),但在这种情况下,我只是为了调试而写入日志文件。
您的字符串不是UTF8编码的。如果要将字符串“解码”为unicode,则字符串必须使用参数指定的编码。我试过了,效果很好:
编辑
要将unicode字符串写入文件,可以使用编解码器模块:
指定输入/输出的编码和在整个代码中使用“unicode”字符串是很方便的,而无需考虑不同的编码。
不在第一行它不:
第二行将出错,尽管:
这完全是您所期望的,尝试将非ASCII Unicode字符写入字节流。如果使用Jiri建议的编解码器包装流,则可以直接编写Unicode,否则必须手动将Unicode字符串重新编码为字节。
更好的做法是,出于日志记录的目的,只需输出变量的repr()。那么您就不必担心Unicode字符、换行符或其他不需要的字符:
显然是1字节编码“在UTF-8中是”\xc3\xb6“。
编码可能是:
相关问题 更多 >
编程相关推荐