我想我有一個編碼問題。我對Perl的瞭解並不多。與其他語言更好,但我已經嘗試了所有我能想到的事情,並檢查了很多其他帖子。在Perl中將變量保存到文本文件時出現損壞的西班牙字符
- 我正在收集姓名和地址。這可以包含非英文字符。在這種情況下西班牙語
- 一個php進程使用curl來執行.pl腳本並傳遞值URLEncoded
- .pl在.pm中執行一個函數,該函數將數據寫入文本文件。沒有涉及數據庫。
兩者。特等和.pm的具有
use Encode;
use utf8;
binmode (STDIN, 'utf8');
binmode (STDOUT, 'utf8');
定義。以下是將文本寫入文件的功能
sub bookingCSV(@){
my $filename = "test.csv";
utf8::decode($_[1]{booking}->{LeadNameFirst});
open OUT, ">:utf8", $filename;
$_="\"$_[1]{booking}->{BookingNo}¦¦$_[1]{booking}->{ShortPlace}¦¦$_[1]{booking}->{ShortDev}¦¦$_[1]{booking}->{ShortAcc}¦¦$_[1]{booking}->{LeadNameFirst}¦¦$_[1]{booking}->{LeadNameLast}¦¦$_[1]{booking}->{Email}¦¦$_[1]{booking}->{Telephone}¦¦$_[1]{booking}->{Company}¦¦$_[1]{booking}->{Address1}¦¦$_[1]{booking}->{Address2}¦¦$_[1]{booking}->{Town}¦¦$_[1]{booking}->{County}¦¦$_[1]{booking}->{Zip}¦¦$_[1]{booking}->{Country}¦¦";
print OUT $_;
close (OUT);
所有西班牙文字符在文本文件中都已損壞。我曾嘗試在一個特定字段「LeadNameFirst」上解碼,但這沒有什麼區別。我保留了代碼以防萬一它有用。
感謝您的任何幫助。
你怎麼知道字符被損壞?如果您使用的編輯器不支持UTF-8,則每個2字節字符將顯示爲2個垃圾字符。那是你所看到的嗎?請爲您的帖子添加示例。 –
'binmode STDOUT,'utf8''做了什麼?該圖層應以冒號開頭:'binmode STDOUT,':utf8''。 (雖然這可能不會導致你的問題) – mob
@ JimGarrison @ mob我希望我能夠正確地做到這一點。第一次使用stackoverflow和發現後/評論過程有點混亂。 Jim回答你的問題,我可以在Linux上使用vi來查看創建的文件,並顯示錯誤的字符。然後我可以使用vi來完美地添加西班牙文字符。我甚至不需要一個編輯器,只是使用「貓」來查看文件顯示損壞的characters.If手動編輯然後貓完美的作品。 – Rob