2011-09-28 124 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