在Python2.7中,我以unicode的方式阅读,以utf-16-le的格式编写。大多数字符都被正确地解释了。但有些不是,例如u'\u810a',也称为unichr(33034)。以下代码代码写入不正确:
import codecs
with open('temp.txt','w') as temp:
temp.write(codecs.BOM_UTF16_LE)
text = unichr(33034) # text = u'\u810a'
temp.write(text.encode('utf-16-le'))
但是,如果上面的代码被替换了,代码就会正常工作。在
unichr(33033)和unichr(33035)工作正常。
“utf-8”编码(不带BOM,byte-order mark)。
如何识别无法正确写入的字符,以及如何使用BOM编写一个“utf-16-le”编码的文件来打印这些字符或某些替换内容?在
您已经在使用编解码器库。在处理该文件时,应该使用open()与编解码器.打开()透明地处理编码。在
如果之后出现问题,则可能是查看器有问题,而不是Python脚本。在
您正在以文本模式打开文件,这意味着line-break characters/bytes will be translated to the local convention。不幸的是,您试图写入的字符包含一个字节
0A
,该字节被解释为换行符,不能正确地写入文件。在请改为以二进制模式打开文件:
@Joni的答案是问题的根源,但是如果您使用
codecs.open
,它总是以二进制模式打开,即使没有指定。使用utf16
编解码器也会自动使用本机尾数写入BOM:
^{pr2}$temp.txt
的十六进制转储:参考号:codecs.open
相关问题 更多 >
编程相关推荐