2013-10-24 76 views
1

如何將utf7字符串轉換爲iso-8859-1格式?我嘗試以下,但它打印錯誤的結果:將utf7字符串轉換爲iso8859-1

use Encode qw(encode decode); 
$data ='t+AOQ-m+AOQ- on mit+AOQ- on'; 
$data = encode("iso-8859-1", decode("utf7", $data)); 
print $data; #result Tämä on mitä on 

這將打印tΣmΣ on mitΣ on,但它應該打印Tämä on mitä on

+0

也許ü意味着'編碼( 'ISO-8859-1',解碼( 'UTF7',$數據));'? – Suic

+0

是的,這是我的意思,但這是我的代碼不起作用 – user2914962

+0

此代碼的結果是tΣmΣonmitΣon,但是正確的結果應該是關於012的Tämä – user2914962

回答

5
use Encode qw(encode decode); 
$data ='t+AOQ-m+AOQ- on mit+AOQ- on'; 
$data = encode("iso-latin-1", decode("utf7", $data)); 
printf "%v02X\n", $data; 

74.E4.6D.E4.20.6F.6E.20.6D.69.74.E4.20.6F.6E 

這是ISO-LATIN-1編碼

tämä on mitä on 

如果您看到「tämäonmitäon」以外的內容,那是因爲您用來查看它的工具將它視爲iso-latin-1以外的內容。

你想要iso-latin-1,還是希望它在你的工具中正確顯示?如果是後者,請使用正確的編碼,而不是iso-latin-1。

如果命令行工具chcp返回437(例如),則需要cp437。

use Encode qw(encode decode); 
my $raw ='t+AOQ-m+AOQ- on mit+AOQ- on'; 
my $data = decode("utf7", $raw); 
print encode("cp437", "$data\n"); 

或更好,但

use open ':std', ':encoding(cp437)'; 
use Encode qw(decode); 
my $raw ='t+AOQ-m+AOQ- on mit+AOQ- on'; 
my $data = decode("utf7", $raw); 
print "$data\n"; 
+0

加入我的回答。 – ikegami

+0

謝謝很多ikegami,你救了我的一天:-) – user2914962