2011-09-28 111 views
4

我正在从一个软件(我无法更改)调用CGI脚本。提交软件的变量是给我的问题,因为如果它们包含非ASCII字符,它们看起来像这样的:Perl:解码“乱码”Unicode字符串

ÿFFFFDEetta er texti meÿFFFFF0 ÿFFFFEDslenskum stÿFFFFF6fum

代替

Þetta er texti með íslenskum stöfum

我试过弄脏Encode::decode函数,但没有结果 - 我所要做的就是改变ÿ如何表示。

所以是的,我有点难住。我该如何将所有的ÿFFFFDE s改为Þ s等等,而不是单独替换每个非ascii字符(这不是一种解决方案,因为这需要适用于我甚至不会说话的语言)?

+0

看来您的脚本正在处理octects。 CGI和调用程序之间是否有软件?你是如何配置CGI来处理Unicode的? –

回答

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' 
+0

完美!谢谢。这是逃避我的unicode逃脱。 – Swooper