【问题标题】:Can a UTF-8 file contain some characters which are not UTF-8?UTF-8 文件可以包含一些不是 UTF-8 的字符吗?
【发布时间】:2012-02-06 20:44:30
【问题描述】:

我正在尝试将文件导入某些软件,但它抱怨该文件未保存为 UTF-8。我检查了我的编辑器gedit,它声称它是这样保存的。我也尝试另存为 Windows 文件,而不是 Linux,但这没有帮助。所以,我将文件分成几部分,发现 99% 的文件都很好,但是在大约 3 行文本中,有些东西让软件很烦。该文件中有许多不同的语言,因此有很多不寻常的符号。文档中的某些符号是否可能来自 UTF-8?

【问题讨论】:

标签: linux utf-8


【解决方案1】:

您在评论中提到的字符“A”是:

U+FF21 全宽拉丁文大写字母 A

并且在 UTF-8 中被编码为:

0xEF 0xBC 0xA1

您可以检查这些是否是您在文件中的字节(很可能)。

如果是这样,那么这是您的软件中的错误。也许它会尝试通过查看文件的第一个字节来自动发现文件的编码或类型,但它会以某种方式感到困惑。

也许它看到了第一个字节 (0xEF) 并且毫无头绪地期待一个 BOM(字节顺序标记),它是 UTF-8:0xEF 0xBB 0xBF。但是它不存在,所以它会抛出一个错误。

【讨论】:

    【解决方案2】:

    UTF-8 文件可以包含一些不是 UTF-8 的字符吗?

    不,因为那样它就不是 UTF-8 文件了。

    我也尝试另存为 Windows 文件,而不是 Linux,但这没有帮助。

    Windows 和 Unix 行尾都与 UTF-8 无关。

    该文件中有许多不同的语言,因此有很多不寻常的符号。文档中的某些符号是否可能来自 UTF-8?

    没有。所有符号(Unicode 代码点)都可以用 UTF-8 表示。但是,文件中的某些字节可能不是有效的 UTF-8 编码。

    如果 Gedit 声称这样做,它不太可能输出无效的 UTF-8,所以有几种可能性:

    1. 正在使用导入软件无法读取的 Unicode 标记。
    2. 未使用 unicode 标记,重要的软件需要使用。
    3. 导入软件未正确解析 UTF-8。
    4. 导入软件无法识别所有代码点。请参阅 rodrigo 的 answer 了解更多信息。

    【讨论】:

    • 我已将问题缩小到文件开头的单个字母字符“A”(第一行的第一个字符)。如果放在文件的第一行,它只会导致问题。如果放在其他地方,没有问题,文件导入成功。
    • @Village:这可能是某些字节顺序标记的一部分(可能性 1),但您需要提供更多信息。
    【解决方案3】:

    有些程序没有正确处理 UTF-8 的某些特性。

    例如,某些程序无法正确读取/写入代理对作为单个 UTF-8 代码点,而是为每个对写入/预期两个单独的 UTF-8 代码点。

    有些程序根本无法处理 BMP 之外的代码点,即前 64K 字符。

    你应该检查你的文件是否有这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-07
      • 2014-04-16
      • 2016-04-24
      • 1970-01-01
      • 2018-09-21
      • 2010-09-12
      • 2012-06-09
      相关资源
      最近更新 更多