О себе События Портфолио Статьи Гостевая Фотоальбом На злобу дня Ссылки Учеба Программы
Alex_K (г.Киров) - Алексей Кощеев
Хостинг и регистрация доменов в Кирове

Интересные решения Perl. Вопросы и ответы

Как конвертировать строку из 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. перекопал пол-Сети. на программистских форумах используют какие-то нестандартные модули и много лишнего стаффа. у вас все четко и просто.

спасибо.

с уважением,
Валерий.

Далее: Как получить содержимое файла в переменную?
Предыдущий вопрос:Как заставить Perl работать с русскими символами?
Перейти к списку вопросов
Fanshop.ru

Рейтинг@Mail.ru

Rambler's Top100

© Алексей Кощеев, г.Киров, 2001-2017 хостинг предоставлен компанией Айхэд