我有一个十二岁的Windows程序。 由于可以很明显的知识化,它是专为ASCII字符,不是Unicode。 它的大部分已经转换,但有一个地方仍然需要进行切换的。 有它的严重制约,但:完全相同的ASCII 字节序列必须由不同的编码器,其中一些将在非Windows系统进行操作来创建。
我试图确定UTF-8是否会做的伎俩或没有。 我听说在通过不同的UTF-8序列可以拿出同样的Unicode字符串,这将是一个问题在这里。
所以,问题是:给定一个Unicode字符串,我可以期望通过任何符合标准的实现转换器来产生一个规范的UTF-8序列? 还是有多种可能性?
任何给定的Unicode字符串将只有一个在UTF-8表示。
我认为这里的混乱是有使用Unicode多种方式来获得一些语言相同的视觉输出。 且不说Unicode有几个字符没有可视化表示。
但是,这无关使用UTF-8,它的Unicode本身的属性。 一个给定的Unicode为UTF-8编码是纯机械的过程,它是完全可逆的。
转换规则在这里: http://en.wikipedia.org/wiki/UTF-8
正如约翰已经说过了,只有一个符合标准的UTF-8表示。
但棘手的问题是“符合标准”。 旧的编码器通常无法正确转换,因为代理人的UTF-16。 Java是那些不符合要求的转换器(它会产生两个3字节的序列,而不是一个4字节的序列)中的一个显着的情况下。 MySQL的有问题直到最近,我不知道的当前状态。
现在,你只会有需要的代理人,上述U + FFFF意思码点的问题。 如果应用程序,而Unicode的存活了很长一段时间,这意味着你从来不需要移动这样的“深奥”字:-)
但是,这是好事,从一开始去得到的东西。 尝试使用符合标准的编码器,你会被罚款。