Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с encod'ом 
V
    Опции темы
Perl_sapiens
Дата 7.5.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Код

use Encode qw(encode);
$login="омг";
$str = encode("utf8", $login);


при выполнении, пишет:

Код

D:\usr>perl D:\usr\klanz-3.pl
Encode object version 2.12 does not match bootstrap parameter 0.00 at D:/usr/local/perl/lib/XSLoader.pm line 94.
Compilation failed in require at D:\usr\k-3.pl line 13.
BEGIN failed--compilation aborted at D:\usr\k-3.pl line 13.


как быть? Надо строку $login переделать в UTF-8
PM MAIL   Вверх
amg
Дата 8.5.2008, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Perl_sapiens, похоже, у Вас что-то не в порядке с модулем Encode (а может, еще с чем-то в дистрибутиве perl). Попробуйте просто переустановить perl. 

Но Ваш код все равно не сработал бы. Функция encode перекодирует в указанную кодировку уже декодированную строку (т.е. строку, находящуюся во внутреннем представлении perl). Для декодирования служит функция decode, которой нужно указывать текущую кодировку строки.
$str = encode("utf8", decode('cp1251', $login));

Функции encode и decode импортируются модулем по умолчанию, т.е. qw(encode) не обязательно.
PM MAIL   Вверх
ginnie
Дата 8.5.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



В подтверждение слов amg:

Код

#! /usr/bin/perl
use strict;
use warnings;

use Encode;

my $login = "омг";
my $str = encode("utf8", $login);
my $str2 = encode('utf8', decode('cp1251', $login));
warn $str;
warn $str2;


Код

îìã at test.pl line 10.
РѕРјРі at test.pl line 11.


т.е. если не перекодировать из cp1251 во внутрений формат, encode() сработает, но вернет неверный результат, т.к. не умеет определять кодировку символов самостоятельно.

Это сообщение отредактировал(а) ginnie - 8.5.2008, 09:36


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Perl_sapiens
  Дата 8.5.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Эм... не, переустановка не помогла(((
ginnie, вот даже твой код взял, но всеравно попа:

D:\usr\_SCRiPTS_\test_encode.pl:
Код

#!/usr/bin/perl
use Encode;

my $login = "омг";
my $str = encode("utf8", $login);
my $str2 = encode('utf8', decode('cp1251', $login));
warn $str;
warn $str2;


Консоль:
Код

D:\usr\_SCRiPTS_>perl D:\usr\_SCRiPTS_\test_encode.pl
Encode object version 2.12 does not match bootstrap parameter 0.00 at D:/usr/local/perl/lib/XSLoader.pm line 94.
Compilation failed in require at D:\usr\_SCRiPTS_\test_encode.pl line 2.
BEGIN failed--compilation aborted at D:\usr\_SCRiPTS_\test_encode.pl line 2.


блин.... чеж делать то?

Perl-дистрибутив взят из дистрибутива DENWER.

Это сообщение отредактировал(а) Perl_sapiens - 8.5.2008, 19:48
PM MAIL   Вверх
FooBar
Дата 8.5.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 25.2.2008

Репутация: 1
Всего: 3



Perl_sapiens, скачайте нормальный перл, в денвере перл урезаннный
PM MAIL   Вверх
Perl_sapiens
Дата 8.5.2008, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Окей. А на сколько урезанный?(я не про miniperl.exe говорю, а про скаченное расширение)
----
Всё, проблему решил: взял АктивПерл, подредактировал пути в его файлах(точнее в файлах перла) и все заработало как часы.

Это сообщение отредактировал(а) Perl_sapiens - 9.5.2008, 00:06
PM MAIL   Вверх
Lvovich
Дата 2.6.2010, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.6.2010

Репутация: нет
Всего: нет



А можно поподробнее: какие пути в каких файлах и как подправили?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.