Я использую Foswiki и столкнулся с очень странной проблемой. Я использую сервер LDAP для аутентификации людей, и найденные записи с китайским кодируются в utf-8, даже если это уже utf-8. Вот что я сделал
- Я запускаю эти тестовые коды в командной строке и получаю правильный результат
$str = "程洋" #это китайские слова print STDERR "string is $str";
$str =~ s/(.)/sprintf("0x%x",ord($1))/например;
print STDERR "шестнадцатеричная строка равна $str";
->程洋
->0xe7 0xa8 0x8b 0xe6 0xb4 0x8
Я не могу использовать code sample
в этих кодах, кажется, что строковое выражение сбивает с толку систему уценки. Извините за это.
- Я запускаю те же коды в системе плагинов Foswiki, которая поддерживается apache2, в этой среде
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
, вещи на веб-странице также будут отображаться таким образом и приводить к путанице кодов любых китайских слов, почему?