我正在使用 Foswiki 并遇到了非常奇怪的问题。我正在使用 LDAP 服务器对人员进行身份验证,发现带有中文的条目被编码为 utf-8,即使它已经是 utf-8。这是我所做的
- 我在命令行中运行这个测试代码,并得到正确的输出
$str = "程洋" #它们是汉字 print STDERR "string is $str";
$str =~ s/(.)/sprintf("0x%x",ord($1))/eg;
print STDERR "string hex is $str";
->程洋
->0xe7 0xa8 0x8b 0xe6 0xb4 0x8
我不能code sample
在这些代码上使用,似乎字符串表达式混淆了降价系统。对不起。
- 我在 apache2 持有的 Foswiki 插件系统中运行相同的代码,在这种环境下,
print STDERR
将自动重定向到 /var/log/apache2/error.log,这次我得到这样的输出->\xc3\xa7\xc2\xa8\xc2\x8b\xc3\xa6\xc2\xb4\xc2\x8b ->0xe7 0xa8 0x8b 0xe6 0xb4 0x8b
如您所见,单词被转义为类似 url 的字符串,如果是0xe7\xa8\x8b\xe6\xb4\x8b
那么我认为没关系,但即使它已经是 utf-8,它们也会再次编码为 utf-8,但十六进制仍然可以。不光是这样print
,网页上的东西也会这样显示,导致任何中文单词的乱码,为什么?