gpt4 book ai didi

python - UTF-8 字符是否涵盖了 ISO8859-xx 和 windows-12xx 的所有编码?

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:27 25 4
gpt4 key购买 nike

我正在尝试用 python 从一堆具有不同编码的文档中编写一个通用文档索引器。我想知道是否可以使用 utf-8 读取我的所有文档(使用 utf-8、ISO8859-xx 和 windows-12xx 编码)而不丢失字符?

阅读部分如下:

fin=codecs.open(doc_name, "r","utf-8");

doc_content=fin.read()

最佳答案

我将稍微改一下您的问题。我相信您在问,“如果它实际上是 ISO8869-xx 或 Windows-12xx,我可以打开一个文档并像 UTF-8 一样阅读它吗?”。这就是您发布的 Python 代码尝试执行的操作。

这个问题的答案是。如果您发布的 Python 代码包含序数 127 以上的任何字符,它们将破坏文档。这是因为“代码页”使用从 128 到 255 的数字分别代表一个字符,其中 UTF-8 使用该数字范围来代理多字节字符.因此,如果您错误地将文件解析为 UTF-8,文档中不在 ASCII 中的每个字符将被解释为无效字符串,或者将与后续字节组合以形成单个 UTF-8 代码点.

举个具体的例子,假设您的文档在 Windows-1252 中。它包含字节序列 0xC3 0xAE,或“î”(波浪号,注册商标符号)。在 UTF-8 中,相同的字节序列表示一个字符“ï”(带分音符的小“i”)。在 Windows-874 中,相同的序列将是“รฎ”。这些是相当不同的字符串 - 道德侮辱可能会成为下棋的邀请,反之亦然。失去了意义。

现在,对于一个稍微不同的问题——“我可以将我的文件从当前编码无损地转换为 UTF-8 吗?”或者,“我可以将当​​前文件中的所有数据表示为 UTF-8 字节流吗?”。这些问题的答案是(模数一些模糊位)。 Unicode 旨在为任何先前存在的代码页中的每个表意文字提供一个代码点,并且总的来说已经成功实现了这一目标。有一些粗糙的边缘,但使用 Unicode 作为通用交换格式可能会为您提供良好的服务(UTF-8 是一种很好的表示形式)。

但是,要实现转换,您必须已经知道并说明文件在读取时的格式。否则 Python 将错误地处理非 ASCII 字符,并且您将严重损坏您的文本(事实上,如果您丢弃无效的 UTF8 序列或特定错误转换的字节范围的来源,将无法挽回)。

如果文本是全部100% ASCII,您可以毫无问题地将其作为 UTF-8 打开,因为前 127 个代码点是共享的两种表示。

关于python - UTF-8 字符是否涵盖了 ISO8859-xx 和 windows-12xx 的所有编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com