用python编写unicode这个ch有什么问题

2024-10-02 14:17:25 发布

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

在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'))

但是,如果上面的代码被替换了,代码就会正常工作。在

  1. unichr(33033)和unichr(33035)工作正常。

  2. “utf-8”编码(不带BOM,byte-order mark)。

如何识别无法正确写入的字符,以及如何使用BOM编写一个“utf-16-le”编码的文件来打印这些字符或某些替换内容?在


Tags: 代码textle编码格式方式unicodebom
3条回答

您已经在使用编解码器库。在处理该文件时,应该使用open()与编解码器.打开()透明地处理编码。在

import codecs
with codecs.open('temp.txt', 'w', encoding='utf-16-le') as temp:
    temp.write(unichr(33033))
    temp.write(unichr(33034))
    temp.write(unichr(33035))

如果之后出现问题,则可能是查看器有问题,而不是Python脚本。在

您正在以文本模式打开文件,这意味着line-break characters/bytes will be translated to the local convention。不幸的是,您试图写入的字符包含一个字节0A,该字节被解释为换行符,不能正确地写入文件。在

请改为以二进制模式打开文件:

open('temp.txt','wb')

@Joni的答案是问题的根源,但是如果您使用codecs.open,它总是以二进制模式打开,即使没有指定。使用utf16编解码器也会自动使用本机尾数写入BOM:

import codecs
with codecs.open('temp.txt','w','utf16') as temp:
    temp.write(u'\u810a')

temp.txt的十六进制转储:

^{pr2}$

参考号:codecs.open

相关问题 更多 >

    热门问题