我有一个已有12年历史的Windows程序。对知识渊博者来说可能是显而易见的,它是为ASCII字符设计的,而不是Unicode。其中大部分已经转换,但还有一个地方仍需要改变。但是它有一个严重的限制:完全相同的 ASCII 字节序列必须由不同的编码器创建,其中一些编码器将在非Windows系统。
我正在尝试确定UTF-8是否会成功。我已经听说不同的UTF-8序列可以提供相同的Unicode字符串,这将是一个问题。
所以问题是:给定一个Unicode字符串,我可以期望任何符合标准的转换器实现生成单个规范的UTF-8序列吗?或者有多种可能性?
答案 0 :(得分:4)
任何给定的Unicode字符串在UTF-8中只有一个表示形式。
我认为这里的混淆是,Unicode有多种方法可以为某些语言提供相同的可视输出。更不用说Unicode有几个没有可视化表示的字符。
但这与UTF-8无关,它本身就是Unicode的属性。将给定Unicode编码为UTF-8是一个纯粹的机械过程,它是完全可逆的。
答案 1 :(得分:3)
正如约翰所说,只有一种符合标准的UTF-8表示。
但棘手的一点是“符合标准”。 较旧的编码器通常无法正确转换UTF-16,因为代理。 Java是那些不符合转换器的一个值得注意的例子(它将产生两个3字节序列而不是一个4字节序列)。 MySQL直到最近才出现问题,我不确定当前的状态。
现在,您只会遇到需要代理的代码点问题,这意味着U + FFFF以上。如果你的应用程序在没有Unicode的情况下存活了很长时间,那就意味着你永远不需要移动这样的“深奥”字符: - )
但是从一开始就把事情搞定是件好事。 尝试使用符合标准的编码器,你会没事的。