如何在Python中读取Unicode文件(非UTF-8)

2 投票
1 回答
6823 浏览
提问于 2025-04-18 05:23

如何在 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 个回答

5

磁盘文件其实就是一串字节,如果你用像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()

撰写回答