【问题标题】:encode a value to UTF 32将值编码为 UTF 32
【发布时间】:2017-06-23 18:14:56
【问题描述】:

我正在尝试测试我必须为学校的课程编写的 Unicode 32 解码器程序。我正在寻找一种能够准确地将 UTF 32 字节写入文件的解决方案,以便我可以尝试对其进行解码。

我一直在尝试开发一种方法来测试它,而无需将 Unicode 编程为 UTF32 编码器(这意味着我还必须测试它)。我一直在使用我在网上找到的一个名为 editpad (https://www.editpadlite.com/) 的程序,它可以让我用 utf32 进行编码……然后我可以在上面测试我的程序。

但是,我会尝试在该程序中编码 U+2A580(unicode 代码点),然后在 linux 中使用终端命令

od -tx1 file.txt

查看它,结果如下:

00 00 fe ff 00 00 d8 69 00 00 dd 80

除了 BOM 之外,这对我来说毫无意义。我只是错误地理解了 UTF32 吗?还是有错误.. 我希望 UTF32 值类似于 02 a5 80

编辑:我的操作系统是 Linux,特别是 Fedora。 Fedora 第 24 版

【问题讨论】:

  • 你能把你的操作系统编辑成问题吗?
  • 鉴于您在 Stack Overflow 上询问,这应该是一个编程问题,因此您的程序中进行转换的代码是相关的,但被省略了。
  • @tadman 认为它与编程有关。在这种情况下,我的代码无关紧要,因为我问的是如何更好地测试它。
  • @Paulb 绝对。编辑它..应该第一次包含它。对不起!

标签: utf utf-32


【解决方案1】:

您是正确的,Unicode 代码点 U+2A580 在 UTF-32BE 中被编码为以下字节序列:

00 02 A5 80

您实际看到的是代码点首先以 UTF-16 编码,然后两个 UTF-16 代理代码单元(0xD869、0xDD80)分别以 UTF-32BE 编码。

发生这种情况的另一个迹象是第一个字节序列:

00 00 FE FF

虽然 UTF-32BE BOM,但它也是以 UTF-32BE 编码的 UTF-16BE BOM。

所以,要么:

  • EditPad 错误地执行双重编码。
  • 尽管您告诉 Edi​​tPad 保存为 UTF-32,但它仍保存为 UTF-16,然后您的 od 输出将 UTF-16 输入错误地表示为 UTF-32。

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 2013-04-21
    • 2017-06-20
    • 2015-03-17
    • 2012-04-24
    • 2015-11-08
    • 2015-07-17
    • 2012-06-30
    • 2012-08-16
    相关资源
    最近更新 更多