如何在Python中读取Unicode文件(非UTF-8)
如何在 python 2.x 中读取 unicode 文件(不是 UTF-8,编码未知)
我试着找一种方法来读取 unicode 文件。 我在网上搜索了很久很久。 但我找不到。 我找到的都是关于如何读取 UTF-8 编码文件的方法。 我知道,当我需要读取 UTF-8 文件时,可以使用 codecs。
codecs.open('unicode2.txt',encoding='utf-8')
用这个我可以读取 UTF-8 文件。 但是我想知道如何读取 unicode 文件。 很多标题为“如何在 python 中读取 unicode 文件”的帖子,其实都是在讲如何读取 UTF-8、UTF-16 等文件。
为什么没有人解释如何读取 “UNICODE” 文件呢?
这是我尝试用 python 读取的文本文件的十六进制值示例。
这是韩文,"파이썬에서 한글 읽기
"
(FF FE) 0C D3 74 C7 6C C3 D0 C5 1C C1 20 00 5C D5 00 AE 20 00 7D C7 30 AE
(FF FE)
表示字节顺序。
每两个字节表示一个字符。
如你所见,空格写成 '20 00',而不是 '20'。
在 unicode 中,空格写成 '20 00'。但在 UTF-8 中,空格写成 '20'。
没有办法像这样使用 codecs "codecs.open('unicode2.txt',encoding='**unicode**')
"
真的没有办法在 python 中读取 “unicode” 文件吗?
1 个回答
磁盘文件其实就是一串字节,如果你用像utf-8或utf-16le这样的字符编码去解读它,就能把这些字节看成文本。"unicode"本身并不是一种字符编码。
你举的例子文件可能使用的是utf-16le
编码:
>>> text = u"파이썬"
>>> text.encode('utf-16le')
'\x0c\xd3t\xc7l\xc3'
>>> text.encode('utf-16le').encode('hex')
'0cd374c76cc3'
b'\xff\xfe' == codecs.BOM_UTF16_LE
是UTF-16(小端)字符编码的字节顺序标记(BOM)。要读取这样的文件,你可以使用utf-16编码(大端或小端是根据BOM来选择的):
import codecs
with codecs.open('filename', encoding='utf-16') as file:
text = file.read()