我有一個字符串包含不是UTF8的charactures,比如「עברית」 我想將字符串寫入文件而不編碼字符串。爲此,我打開文件以寫入二進制文件:在Unicode編寫unicode字符串到二進制文件
open my $fh, ">>:raw", "/tmp/bla";
print $fh $mystring;
close $fh;
問題是該文件已損壞。我在二進制視圖中打開它,並且一些字節已損壞。 我做錯了什麼?將字符串寫入文件而不編碼它是不可能的?
我有一個字符串包含不是UTF8的charactures,比如「עברית」 我想將字符串寫入文件而不編碼字符串。爲此,我打開文件以寫入二進制文件:在Unicode編寫unicode字符串到二進制文件
open my $fh, ">>:raw", "/tmp/bla";
print $fh $mystring;
close $fh;
問題是該文件已損壞。我在二進制視圖中打開它,並且一些字節已損壞。 我做錯了什麼?將字符串寫入文件而不編碼它是不可能的?
您的評估是正確的,這樣做是錯誤的。 You must encode text。例如:raw
is for binary data,例如圖片。如果您發現UTF-8不合適,也許您正在尋找編碼ISO-8859-8或Windows-1255。
閱讀http://p3rl.org/UNI瞭解Perl中的編碼主題。
但爲什麼這不正確?我不承認。不能我寫字符串爲二進制?我有一個編碼它的問題,因爲我沒有任何控制讀取文件的應用程序,並將不得不解碼它不寫在perl,但在c。 – Shay 2012-01-02 16:25:34
@Shay,那麼你的C程序期望什麼編碼? – ikegami 2012-01-02 21:05:47
@daxim爲了保存一個PDF文件,除了把它寫成二進制文件外,我沒有發現任何其他的工作。例如,打開(PDF,「> $ filename」); binmode PDF;打印PDF $內容,將文件寫入二進制文件。之後我可以在vim中打開它,並將其作爲文本閱讀,但部分看起來很有趣。任何嘗試用編碼寫入它都會毀壞文件。爲什麼PDF是一個例外? – 2016-04-03 02:21:47
編碼是使用字節的文本的表示。例如,
ת === UTF-8 ==========> D7 AA
ת === Windows-1255 ===> FA
ת === iso-8859-8 =====> FA
這是不可能存放在一個文件中的文本沒有編碼,因爲文件只能包含字節。
如果$mystring
已經包含字節(編碼文本),但您說您有一個「Unicode字符串」,那麼您的代碼有效。
我相信你實現你的文件正在使用
cat file
或類似破壞的結論。在這種情況下,您希望文件按照您的語言環境進行編碼。
use open ':locale';
open my $fh, ">>", "file" or die $!;
print $fh $mystring;
它是不是UTF8?如果它被正確打開,它將在UTF8內部。 – 2012-01-02 17:59:14