запись строки Unicode в двоичный файл в Perl - PullRequest
2 голосов
/ 02 января 2012

У меня есть строка, которая содержит характерные черты, которые не являются UTF8, такие как "עברית" Я хочу записать строку в файл без кодирования строки. Для этого я открыл файл для записи в двоичном виде:

open my $fh, ">>:raw", "/tmp/bla";
print $fh $mystring;
close $fh;

Проблема в том, что файл поврежден. Я открываю его в двоичном представлении, и некоторые байты повреждены. Я делаю что-то неправильно? Разве невозможно записать строку в файл без ее кодирования?

Ответы [ 2 ]

1 голос
/ 02 января 2012

Ваша оценка правильная, а неправильная. Вы должны кодировать текст . :raw для двоичных данных , например, изображений. Если вы считаете UTF-8 неподходящим, возможно, вы искали кодировки ISO-8859-8 или Windows-1255.

Прочитайте http://p3rl.org/UNI, чтобы узнать о теме кодирования в Perl.

0 голосов
/ 03 января 2012

Кодировка - это представление текста в байтах. Например,

ת  === 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;
...