我有一個 Perl 腳本,我們正在從具有不同貨幣符號的 .csv 檔案中讀取資料。當我們讀取該檔案并寫入內容時,我可以看到它正在列印
Get <A3>50 or <80>50 daily
實際值為
Get £50 or €50 daily
如果有任何其他貨幣代碼不起作用,則使用美元符號它可以正常作業
我試過了
open my $in, '<:encoding(UTF-8)', 'input-file-name' or die $!;
open my $out, '>:encoding(latin1)', 'output-file-name' or die $!;
while ( <$in> ) {
print $out $_;
}
$ od -t x1 input-file-name
0000000 47 65 74 20 c2 a3 35 30 20 6f 72 20 e2 82 ac 35
0000020 30 20 64 61 69 6c 79 0a
0000030
od -t x1 輸出檔案名 0000000 47 65 74 20 a3 35 30 20 6f 72 20 5c 78 7b 32 30 0000020 61 63 7d 35 30 20 64 61 69 6c 79 0a 0000034
但這也無濟于事。我得到的輸出
Get \xA350 or \x8050 daily
od -t x1 output-file-name
0000000 47 65 74 20 a3 35 30 20 6f 72 20 5c 78 7b 32 30
0000020 61 63 7d 35 30 20 64 61 69 6c 79 0a
0000034
uj5u.com熱心網友回復:
| Unicode 代碼點 | 字形 | UTF-8 | 輸入檔案 | ISO-8859-1 | 輸出檔案 |
|---|---|---|---|---|---|
| U 00A3 磅符號 | 英鎊 | C2 A3 | C2 A3 | A3 | A3 |
| U 20AC 歐標 | 歐元 | E2 82 交流電 | E2 82 交流電 | 不適用 | 5C 78 7B 32 30 61 63 7D |
(“LATIN1”是“ISO-8859-1”的別名。)
輸入檔案沒有問題。
£在您的輸入檔案中正確編碼。€在您的輸入檔案中正確編碼。
至于輸出檔案,
£在您的輸出檔案中正確編碼。€在latin1 charset中找不到,因此\x{20ac}被使用。
您的程式按預期作業。
你說你看到<A3>而不是£。這可能是因為您使用的程式需要使用 UTF-8 編碼的檔案,但您提供了使用 ISO-8859-1 編碼的檔案。
你也說你看到<80>而不是€。但是對于您提供的檔案,您無法看到它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521571.html
標籤:perl
