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


Автор: WebSurfer 6.3.2010, 19:32
Господа, получаю ответ от модуля в utf8 (язык текста ответа - английский), но не могу правильно его отобразить. Вот такого плана текст: Ð Ð ½ Ð ³ Ð »Ð ¸ Ð ¹ Ñ Ð º Ð

В какую сторону его крутить???  smile 

Автор: dva300 6.3.2010, 22:23
Цитата(WebSurfer @ 6.3.2010,  19:32)
Господа, получаю ответ от модуля в utf8 (язык текста ответа - английский), но не могу правильно его отобразить. Вот такого плана текст: Ð Ð ½ Ð ³ Ð »Ð ¸ Ð ¹ Ñ Ð º Ð

В какую сторону его крутить???  smile

а charset на странице у тебя часом не ISO-88.. ?

Автор: WebSurfer 6.3.2010, 23:24
Нет, специально в папке поставил AddDefaultCharset utf-8. Этот текст функция возвращает (должна по мануалам возвращать) в кодировке  utf-8. Только вот результат, как видите, плачевный.

Детали: пытаюсь обучить Lingua::Translate корректно работать. Указанный результат получается при попытке перевести русский текст на английский. Причём русский 100% отправляю в utf-8 и должен на выходе получить английский перевод в такой же кодировке. При переводе наоборот (с английского на русский) всё работает корректно.

Листинг для проверки (необходимо получить api-key у гугля - секундное дело):

Код

use Lingua::Translate;
use Encode;

Lingua::Translate::config
     (
         back_end => 'Google',
         api_key  => '',
         referer  => '',
     );

 my $stext = 'Мой текст на русском языке.';
 $stext=encode("utf8", decode('cp1251',$stext));
 print $stext."<br>";
 my $text = Lingua::Translate->new( src => 'ru', dest => 'en' );
 print $text->translate($stext) . "\n";

Автор: dva300 7.3.2010, 10:11
Цитата

Причём русский 100% отправляю в utf-8 


Цитата

$stext=encode("utf8", decode('cp1251',$stext));


я такой конструкции никогда не использовал и не совсем понимаю зачем она. возможно я не прав но
perldoc дает следующее 
Цитата

When you run $octets = encode("utf8", $string) , then $octets may not be equal to $string. Though they both contain the same data, the UTF8 flag for $octets is always off. When you encode anything, UTF8 flag of the result is always off, even when it contains completely valid utf8 string. See "The UTF8 flag"  below.


у вас же $string уже в uft8. разве не достаточно $stext=decode('cp1251',$stext);

Автор: WebSurfer 7.3.2010, 14:32
dva300, спасибо! это заработало!  smile 

Автор: dva300 7.3.2010, 14:58
Цитата(WebSurfer @ 7.3.2010,  14:32)
dva300, спасибо! это заработало!  smile

 smile  всегда готов 

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