Perl中umlaut“ü”的正确存储值是多少?

时间:2014-08-05 16:02:39

标签: perl unicode utf-8 diacritics

我想直接用Perl提供UTF-8网站。我遇到了几个编码问题,因为源数据没有完全存储在UTF-8中。由于编码问题的调试会话,我发现德语变音符ü有两种不同的表示形式。哪一个是Perl的正确存储值?

  • \xFC,这是U+00FC
  • 的Unicode位置ü
  • 0xC3 0xBC,这是ü
  • 的UTF-8十六进制表示形式

如果没有任何区别,那么为什么Perl会将变音符号存储在不同的表示形式中,并且不会将它存储在Unicode位置或UTF-8十六进制表示中。

Unicode/UTF-8 character table reference

3 个答案:

答案 0 :(得分:8)

使用Encoding::FixLatinfix_latin

$ perl -MEncoding::FixLatin=fix_latin -MEncode=encode_utf8 \
   -E'say sprintf "%v02X", encode_utf8(fix_latin("\xFC\xC3\xBC"))'
C3.BC.C3.BC

在内部,最好使用Unicode。解码输入,编码输出。你可能会忘记对输出进行编码。

答案 1 :(得分:3)

没有"正确",它们是不同的表示。一般来说,最好选择Unicode并将其打印为UTF-8,但主要的复杂因素是确切地知道每个处理步骤的确切含义。如果你可以在整个过程中可靠地使用UTF-8,那么在你的情况下这可能更简单。

答案 2 :(得分:2)

这两个都是正确的。这取决于你的意图。

\xFC是包含ü字符的Unicode文本字符串的正确形式。这通常是您在应用程序中处理文本字符串的形式。

0xC3 0xBC是字符串的正确形式,它将ü字符编码为UTF-8。这通常是从某个外部实体接收或传输UTF-8字节的形式,例如网络套接字或磁盘文件句柄。