代码之家  ›  专栏  ›  技术社区  ›  Head Geek

我能从Unicode字符串中得到一个标准UTF-8字符串吗?

  •  1
  • Head Geek  · 技术社区  · 15 年前

    我有一个12年前的Windows程序。知识渊博的人可能很清楚,它是为ASCII字符而不是Unicode设计的。大部分已经被改造了,但还有一个地方还需要改造。但有一个严重的限制:完全相同 ASCII码 字节 序列 必须 由不同的编码器创建,其中一些编码器将在非Windows系统上运行。

    我想确定UTF-8是否会成功。我听说不同的UTF-8序列可以产生相同的Unicode字符串,这在这里是个问题。

    所以问题是:给定一个Unicode字符串,我能指望一个规范的UTF-8序列由任何符合标准的转换器实现生成吗?还是有多种可能性?

    2 回复  |  直到 15 年前
        1
  •  4
  •   tchrist    15 年前

    任何给定的Unicode字符串在UTF-8中都只有一个表示形式。

    我认为这里的困惑在于Unicode中有多种方法可以得到相同的结果 视觉的 某些语言的输出。更不用说Unicode有几个没有可视表示的字符。

    但这与UTF-8无关,它本身就是Unicode的一个属性。将给定的Unicode编码为UTF-8是一个纯机械的过程,而且是完全可逆的。

    转换规则如下: http://en.wikipedia.org/wiki/UTF-8

        2
  •  3
  •   Mihai Nita    15 年前

    正如John已经说过的,只有一个标准符合UTF-8表示。

    但棘手的一点是“符合标准”。 由于代理项,旧的编码器通常无法正确转换UTF-16。 Java是那些不一致转换器的一个显著例子(它将生成两个3字节序列,而不是一个4字节序列)。 MySQL直到最近才出现问题,我也不确定当前的状态。

    现在,您只会遇到需要代理的代码点的问题,这意味着在U+FFFF之上。如果应用程序长时间没有使用Unicode,则意味着您不需要移动这样的“深奥”字符:-)

    但从一开始就把事情做好是好事。 尝试使用符合标准的编码器,你会没事的。