Перевести нечитаемый русский текст - PullRequest
0 голосов
/ 05 декабря 2010

Я пытаюсь прочитать документацию, написанную на русском языке, но я не уверен, что то, что я вижу, даже правильно закодировано.Текст выглядит примерно так:

* * * * * * * * * * *

(появляется как несколько специальных символов A и O) *1005* * * *в Firefox.В других программах это выглядит так:

���������� ������� ��������� ����� � ������ �� -1 �� 1

(отображается в виде нескольких вопросительных знаков)

Есть ли надежда перевести это?

Ответы [ 2 ]

5 голосов
/ 05 декабря 2010

Декодировать как CP1251.

>>> print u'Ãåíåðèðóåò ìàòðèöó ñëó÷àéíûõ ÷èñåë â äèàïàçîí'.encode('latin-1').decode('cp1251')
Генерирует матрицу случайных чисел в диапазон
1 голос
/ 05 декабря 2010

Вам необходимо определить, какой из нескольких возможных кириллических кодировок был использован - на связанном сайте перечислено более десятка возможностей, из которых ISO 8859-5 и CP-1251, возможно, наиболее вероятны.

Вам может помочь один из переводческих веб-сайтов ( Babelfish или Google и, без сомнения, другие), чтобы помочь.Однако вам, возможно, придется перевести исходный кодовый набор в UTF-8, чтобы заставить его работать - простое копирование приведенных выше байтов не сработало.


При копировании исходного текста на Mac онбыл закодирован как UTF-8:

0x0000: C3 83 C3 A5 C3 AD C3 A5 C3 B0 C3 A8 C3 B0 C3 B3   ................
0x0010: C3 A5 C3 B2 20 C3 AC C3 A0 C3 B2 C3 B0 C3 A8 C3   .... ...........
0x0020: B6 C3 B3 20 C3 B1 C3 AB C3 B3 C3 B7 C3 A0 C3 A9   ... ............
0x0030: C3 AD C3 BB C3 B5 20 C3 B7 C3 A8 C3 B1 C3 A5 C3   ...... .........
0x0040: AB 20 C3 A2 20 C3 A4 C3 A8 C3 A0 C3 AF C3 A0 C3   . .. ...........
0x0050: A7 C3 AE C3 AD C3 A5 20 C3 AE C3 B2 20 2D 31 20   ....... .... -1 
0x0060: C3 A4 C3 AE 20 31 0A                              .... 1.
0x0067:

Итак, чтобы перевести это на Perl, я сначала использовал модуль Encode , чтобы преобразовать строку UTF-8 обратно в Latin-1, изатем я велел Perl обращаться с Latin-1 как с CP-1251 и преобразовывать его обратно в UTF-8:

#!/usr/bin/env perl

use Encode qw( from_to );
my $source = 'Ãåíåðèðóåò ìàòðèöó ñëó÷àéíûõ ÷èñåë â äèàïàçîíå îò -1 äî 1';
# from_to changes things 'in situ'
my $nbytes = from_to($source, "utf-8", "latin-1");
# print "$nbytes: $source\n";
   $nbytes = from_to($source, "cp-1251", "utf-8");
print "$nbytes: $source\n";

Выходные данные:

  • 102:Генерирует матрицу случайных чисел в диапазоне от -1 до 1

Который Babelfish переводит как:

  • 102: Генерирует матрицу случайных чисел в диапазоне от -1 до1

и Google переводит как:

  • 102: генерирует матрицу случайных чисел в диапазоне от -1 до 1

Исходный UTFПеревод с -8 на Latin-1 требовался из-за настроек на моем Mac (мой терминal по умолчанию использует UTF-8 и т. д.): YMMV.

...