0

我正在使用 Foswiki 并遇到了非常奇怪的问题。我正在使用 LDAP 服务器对人员进行身份验证,发现带有中文的条目被编码为 utf-8,即使它已经是 utf-8。这是我所做的

  1. 我在命令行中运行这个测试代码,并得到正确的输出

$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在这些代码上使用,似乎字符串表达式混淆了降价系统。对不起。

  1. 我在 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,网页上的东西也会这样显示,导致任何中文单词的乱码,为什么?

4

1 回答 1

0

这似乎与支持问题 1817 http://foswiki.org/Support/Question1817有关。

我对 Foswiki 中的 utf-8 支持没有经验,也不知道有谁会。

建议您在 Foswiki-discuss@lists.sourceforge.net 上发布您的问题。并声明:

  • 维基版
  • perl 版本
  • 阿帕奇版本
  • 操作系统

它可能会分发给具有正确技能的人。

于 2016-09-21T04:56:16.877 回答