Как конвертировать строку из UTF-8 в Windows-1251?
Есть как минимум 4 варианта:
1. Написать собственную процедуру перекодировки. В этом случае придется потратить время на изучение алгоритмов.
2. Можно использовать модуль Convert::Cyrillic, однако он испытывает зависимость от модуля Unicode::Map8, который легко установить под *nix, но с поиском модуля под ActiveState Perl 5.8 могут возникнуть проблемы.
3. Можно использовать модуль Text::Iconv, который доступен как для Perl 5.6, так и для Perl 5.8.
my $unicodeTextHere;
# какие-либо действия, устанавливающие в переменную
# ...
# $unicodeTextHere текст в кодировке UTF-8
use Text::Iconv;
my $converter = Text::Iconv->new('UTF-8', 'WINDOWS-1251');
my $winTextHere = $converter->convert($unicodeTextHere);
# $winTextHere содержит текст в кодировке Windows-1251
4. Если Вы используете Perl 5.8, то конвертирование можно прозвести с помощью Encode:
my $unicodeTextHere;
# какие-либо действия, устанавливающие в переменную
# ...
# $unicodeTextHere текст в кодировке UTF-8
use Encode;
Encode::from_to($unicodeTextHere, 'utf-8', 'windows-1251');
# теперь $unicodeTextHere содержит текст в кодировке Windows-1251
Опубликовано: 19 ноября 2005 года.
Комментарии посетителей сайта
Григорий
03.08.2016 17:20
Отлично. Ничего лишнего и всё понятно. Спасибо!
Дмитрий
25.01.2012 15:46
Спасибо, за хороший пример и пояснения!
Андрей
25.05.2011 00:43
Действительно. Четвертый метод сработал. Спасибо.
Андрей.
Максим
06.11.2010 20:40
Все заработало - мучался с кодировками под ajax для сайта autobarter.ru. Вопрос решился четвертым методом - все быстро и просто. Спасибо!
Максим
Валерий
07.09.2006 10:10
Алексей,
спасибо за ответ по поводу заголовка. Параллельно возник еще один вопрос. Приведенные Вами способы вывода контента в браузер в формате utf-8 конвертируют только строковые переменные - Encode::from_to($var_str, 'windows-1251', 'utf-8');
Есть ли способ для конвертации массива, например,
Encode::from_to(@var_arr, 'windows-1251', 'utf-8');
Пытался использовать
use open OUT => ':utf8';
use open ':utf8';
но ничего не вышло.
Ответ: 07.09.2006 20:20
Для массива используйте функцию map или же обыкновенный цикл.
Валерий
05.09.2006 04:14
кстати, может есть какой-нибудь вариант вывода perl'ом в браузер текста в UTF-8 без использования модулей Unicode и Text::Iconv. например, с использованием модуля CGI.
и почему не помогает вывод заголовка?
print "Content-type: text/html; charset=utf-8
";
Ответ: 05.09.2006 08:29
Отдача заголовка никак не влияет на преобразование текста ответа в эту кодировку.
Валерий
05.09.2006 03:13
Алексей, спасибо за perl-процедуру преобразования русского текста в UTF-8. перекопал пол-Сети. на программистских форумах используют какие-то нестандартные модули и много лишнего стаффа. у вас все четко и просто.