Перекодировка

Матеріал з Wiki.Zina
Перейти до навігації Перейти до пошуку

Перекодировка испорченного текста.

Он-лайн сервисы

[ред. | ред. код]

Перкодировка средствами Linux

[ред. | ред. код]

Источник: http://k001.livejournal.com/557096.html

Если у вас есть некий текст на русском, но в виде кракозябр: Ïåðåêîäèðîâêà, то его можно раскодировать:

iconv -f utf-8 -t iso-8859-1 | iconv -f cp1251 -t utf-8

Например:

echo "Ïåðåêîäèðîâêà" | iconv -f utf-8 -t iso-8859-1 | iconv -f cp1251 -t utf-8
Перекодировка

В некоторых случаях, если вышеуказанная мантра не работает, вместо cp1251 можно попробовать koi8-r.

Перекодировка в траслит

[ред. | ред. код]
echo 'Привет' | iconv -fkoi-8 -t koi-7 | tr A-Za-z a-zA-Z
Priwet

Мне больше konwert нравится:

konwert utf8-iso1+cp1251-utf8

Или, чтобы транслит сделать:

$ echo Привет | konwert utf8-iso1
Privet

Или чтобы HTML заескейпить перед постингом:

konwert txt-htmlchar

Или переводы строк поменять:

konwert lf

Кстати, полученное из koi8-r ""ðÅÒÅËÏÄÉÒÏ×ËÁ", довольно легко отличить по внешнему виду — маленькие буквы перешли в большие кракозябры.

Можно просто использовать частотный метод для определения последовательности фильтров - поучить его чуть-чуть и всё.

Уже есть, называется enca:

echo "Ïåðåêîäèðîâêà"  | enca
Universal transformation format 8 bits; UTF-8
  Doubly-encoded to UTF-8 from ISO-8859-5
echo "Ïåðåêîäèðîâêà" | iconv -f utf-8 -t iso-8859-1 | enconv
Перекодировка

Случай с iso8859-9

[ред. | ред. код]

Источник: http://cyberzx.blogspot.com/2007/12/blog-post.html

Допустим вам пришло сообщение "äîïóñòèì âàì ïğèøëî ñîîáùåíèå". И ваш зоркий глаз в нём сразу же увидел кодировку cp1251 набранную символами западноевропейской кодировки iso8859-9

Казалось бы дело за малым. Первое, что хочется сделать это скопировать текст сообщения в файл(жалко нет устройства /dev/clipboard) и выполнить над ним операцию iconv -f iso8859-9 -t cp1251.

Но почему-то iconv вежливо ругнётся, указав на ошибки в последовательности. Ну конечно же. Ведь тех символов, которые мы видим в сообщении, нет и в помине в кодировке cp1251.

Важно понять, iconv не делает текстовой конвертации, как это получается в редакторах или браузере при смене кодировки. Он делает бинарную конвертацию, оставляя сами симвы, меня лишь их двоичное представление.

В данном случае нам нужна двухступенчатая конвертация. Зашифрованное сообщение мы видим в системной кодировке(у меня это utf8). Из неё нужно получить двоичное представление в однобайтовой кодировке. Поэтому делаем iconv -f utf8 -t iso8859-9. Выход этой комнады и является исходным сообщением, но уже в кодировке cp1251. Которую мы преобразуем в системную, что бы увидеть текст. Вся операция расшифровки будет выглядеть следующим образом:

echo äîïóñòèì âàì ïğèøëî ñîîáùåíèå | iconv -t iso8859-9 | iconv -f cp1251

Почему текст портится

[ред. | ред. код]

Бывают абоненты, от которых из аськи приходит кривой текст. Это происходит, когда ты в оффлайне, и сообщение, написанное в CP1251, «ждёт» тебя на сервере. Вот в этой комнате ожидания его и портят.