Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Как задать кодировку файла для записи


Автор: tolkien 17.5.2010, 20:50
Здарствуйте! Я столкнулся со следующей проблемой. Когда сохраняю содержимое переменой PERL в файл. Файл у меня получается в кодировке utf8. Как мне задать кодировку чтобы файл был в ascii кодировке?

Автор: krypt3r 18.5.2010, 06:18
Код

open my $F, '>:encoding(cp1251)', $file or die "Error: $!\n";

Автор: tolkien 18.5.2010, 14:14
krypt3r 
Ваш способ не работает. Я получаю след сообще от PERL и на выходе файлы заполнены этими x{00ba} последовательностями.

Код

...
"\x{00ba}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00be}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b2}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00a1}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00bd}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b8}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
panic: sv_setpvn called with negative strlen.
Для продолжения нажмите любую клавишу . . .

Автор: dva300 18.5.2010, 15:35
Цитата(tolkien @ 18.5.2010,  14:14)
krypt3r 
Ваш способ не работает. Я получаю след сообще от PERL и на выходе файлы заполнены этими x{00ba} последовательностями.

Код

...
"\x{00ba}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00be}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b2}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00a1}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00bd}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
"\x{00b8}" does not map to cp1251.
"\x{00d0}" does not map to cp1251.
panic: sv_setpvn called with negative strlen.
Для продолжения нажмите любую клавишу . . .

кодируйте строку которую пишите в файл

Код

use Encode;
$str = encode("cp1251", $string);
open(FF,">test.txt");
print FF $str;
close(FF);


перекодирует из utf8 в cp1251

Автор: tolkien 20.5.2010, 00:58
Как мне определить в какой кодировке данные?
Пример:
Читаю файл. Содержимое файла попадает в переменную $s. Как мне тогда определить в какой кодировке там данные ascii или utf8?

Автор: sir_nuf_nuf 20.5.2010, 10:35
надежно никак. Вам нужно заранее знать кодировку.
А так есть модули для "угадывания" кодировки, например Encode::Guess

Автор: tolkien 21.5.2010, 13:48
Но тут есть парадокс. Он заключается в том что Perl сам угадывает кодировку и совершенно правильно работает с текстом. Почему же он не может сам перекодировать utf8 в ascii? Неужели нельзя задать чтобы он выходные файлы писал только в опред кодировке?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)