我想直接用Perl提供UTF-8网站。我遇到了几个编码问题,因为源数据没有完全存储在UTF-8中。由于编码问题的调试会话,我发现德语变音符ü
有两种不同的表示形式。哪一个是Perl的正确存储值?
\xFC
,这是U+00FC
ü
0xC3 0xBC
,这是ü
如果没有任何区别,那么为什么Perl会将变音符号存储在不同的表示形式中,并且不会将它存储在Unicode位置或UTF-8十六进制表示中。
答案 0 :(得分:8)
使用Encoding::FixLatin的fix_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字节的形式,例如网络套接字或磁盘文件句柄。