我想编写一个Python脚本,将文件编码从cp949转换为utf8。该文件最初是以cp949编码的。 我的脚本如下:
cpstr = open('terms.rtf').read()
utfstr = cpstr.decode('cp949').encode('utf-8')
tmp = open('terms_utf.rtf', 'w')
tmp.write(utfstr)
tmp.close()
但这并没有按照我的意愿改变编码方式。
我想编写一个Python脚本,将文件编码从cp949转换为utf8。该文件最初是以cp949编码的。 我的脚本如下:
cpstr = open('terms.rtf').read()
utfstr = cpstr.decode('cp949').encode('utf-8')
tmp = open('terms_utf.rtf', 'w')
tmp.write(utfstr)
tmp.close()
less
/more
/cat
/type
等命令将其输出到终端来确定。{\rtf
开始,其中的所有文本都是纯文本,虽然有时文本块会被分成带有格式命令的单独块——命令以\
开头。由于所有格式命令都是纯ASCII,如果您将纯文本RTF从一种字符集转换为另一种(只要两者都是ASCII的超集,如cp949和utf-8),它就应该可以正常工作。\ansicpg949
。当类似WordPad的RTF编辑器打开您的文件时,如果您不进行修复,它将把所有漂亮的UTF-8数据解释为cp949数据并显示乱码。\ansicpg949
。也许是\ansicpg65001
,也许是\utf8
,也许是完全不同的东西。因此,只需将一个简单的文件保存为UTF-8 RTF,然后在纯文本中查看它,看看它在\ansicpg949
位置放置了什么,然后用正确的字符串替换您的文件中的字符串即可。(请注意,代码页65001不是真正的UTF-8,但它很接近,微软的很多代码都假设它们是相同的...)é
存储为\'e9
),因此无需进行转换。最后,Office Open XML包括一个名为RTF的XML规范,但并不是完全相同的东西。我认为许多RTF编辑器都可以处理这个问题。幸运的是,您可以将其视为纯文本RTF一样处理 - 所有XML标记都具有纯ASCII名称。
file
命令应该能够将其检测为“压缩的RTF”,此时我们可以确定特定格式并将其解压缩,然后您可以将其作为纯文本RTF(或RTFD)进行编辑。import codecs
cpstr = codecs.open('terms.rtf','r','cp949').read()
u = cpstr.encode('cp949').decode('utf-8')
tmp = open('terms_utf.rtf', 'w')
tmp.write(u)
tmp.close()
cp949
解码,然后重新编码为 cp949
,再将其解码为 utf-8
,最后隐式地重新编码为 sys.getdefaultencoding()
是什么?如果这样做不会得到垃圾数据,那你就是地球上最幸运的人了。 - abarnert