Perl: 解码“乱码”的Unicode字符串

4
我正在开发一个CGI脚本,该脚本被某个软件调用(我无法更改此软件)。由于所提交的变量包含非ASCII字符,因此会出现以下问题: ÿFFFFDEetta er texti meÿFFFFF0 ÿFFFFEDslenskum stÿFFFFF6fum 而不是 Þetta er texti með íslenskum stöfum 我尝试使用Encode::decode函数,但没有任何结果-我只能改变ÿ的表示方式。
所以,我有点困惑。如何将所有的ÿFFFFDE替换为Þ等,并使其适用于我甚至不会说的语言,而不必每个非ASCII字符都进行单独替换(这不是解决方案)?

似乎你的脚本是在八位字节上运行的。你的CGI和调用程序之间有软件吗?你是如何配置CGI来处理Unicode的? - Marco De Lellis
1个回答

7
use Encode qw(decode);
use Encode::Escape qw();

$_ = 'ÿFFFFDEetta er texti meÿFFFFF0 ÿFFFFEDslenskum stÿFFFFF6fum';
s/ÿFFFF/\\x/g;
decode('iso-8859-1', decode('unicode-escape', $_));
# returns 'Þetta er texti með íslenskum stöfum'

太好了!谢谢你。我一直没有想到是unicode-escape的问题。 - Swooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接