The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Раздел полезных советов: Перекодирование русских символов ви..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Перекодирование русских символов ви..."  –1 +/
Сообщение от auto_tips (??) on 12-Фев-12, 21:47 
Данная задача появилась когда потребовалось перенести адресную книгу с одного телефона в другой. Использовался wammu. Принцип был таков: подключив первый телефон экспортировать адерсную книгу в .vcf файл, потом подключить второй телефон и импортировать в него .vcf файл. Проблема в том, что русские имена контактов не хотели импортироваться. Было принято решение перекодировать их в транслит.

В .vcf файле имя на русском было записано вот в такой форме:

   N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=92=D0=B0=D1=81=D1=8F

Очевидно, что это юникод, оформленный в формате Quoted-Printable.
Для перевода нужно составить таблицу соответствия таких вот комбинаций транслитерированым символам - в этом, пожалуй, основная сложность задачи.

Внизу скрипт, который выведет команду, которой можно перекодировать файлы. Мягкий и твердый знаки игнорируются.

   #!/bin/sh

   src=(\
   =D0=90 =D0=91 =D0=92 =D0=93 =D0=94 =D0=95 =D0=96 =D0=97 =D0=98 =D0=99 =D0=9A =D0=9B =D0=9C =D0=9D =D0=9E =D0=9F =D0=A0 =D0=A1 =D0=A2 =D0=A3 =D0=A4 =D0=A5 =D0=A6 =D0=A7 =D0=A8 =D0=A9 =D0=AA =D0=AB =D0=AC =D0=AD =D0=AE =D0=AF =D0=B0 =D0=B1 =D0=B2 =D0=B3 =D0=B4 =D0=B5 =D0=B6 =D0=B7 =D0=B8 =D0=B9 =D0=BA =D0=BB =D0=BC =D0=BD =D0=BE =D0=BF =D1=80 =D1=81 =D1=82 =D1=83 =D1=84 =D1=85 =D1=86 =D1=87 =D1=88 =D1=89 =D1=8A =D1=8B =D1=8C =D1=8D =D1=8E =D1=8F)
   res=(\
      A       B     V     G        D     Ye    Zh      Z      I      Y      K      L      M      N      O      P        R       S     T     U        F      H    Ts      Ch     Sh    Sch     Ь      Y      Ь      E      Yu     Ya       a       b     v     g        d     ye    zh      z      i      y      k      l      m      n      o      p    r       s     t     u        f      h    ts      ch     sh    sch     Ь      y      Ь      e      yu     ya)

   CMD=""
   for ((A=0;A<64;A++)) ; do
       CMD=`echo "$CMD | sed -e s/${src[$A]}/${res[$A]}/g"`
   done

   CMD=`echo "cat file.vcf $CMD | sed -e s/Ь//g | sed -e s/N\;CHARSET=UTF-8\;ENCODING=QUOTED-PRINTABLE/N/g | less"`
   echo "$CMD"


Для раскодирования quoted-printable блоков можно использовать простой perl-скрипт:

   echo "=D0=92=D0=B0=D1=81=D1=8F" | perl -e 'use MIME::Decoder; $decoder = new MIME::Decoder "quoted-printable"; $decoder->decode(\*STDIN, \*STDOUT);'

URL:
Обсуждается: http://www.opennet.ru/tips/info/2665.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Перекодирование русских символов вида =D0=9B в транслит"  –1 +/
Сообщение от Аноним (??) on 12-Фев-12, 21:47 
Сильно. Но я для этих же целей использовал машину с виндовс и программы от производителей.
PROFIT
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Перекодирование русских символов вида =D0=9B в транслит"  +1 +/
Сообщение от Crazy Alex (ok) on 12-Фев-12, 23:17 
Понимаете, у приличного пользователя (Power User который), не говоря о программисте/сисадмине вышеописанные манипуляции замут меньше времени, чем установка "программ от производителей".
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Перекодирование русских символов вида =D0=9B в транслит"  +1 +/
Сообщение от JL2001 (ok) on 13-Фев-12, 04:19 
...и установка виндовс чтоб установить программы грёбанного производителя который выпускает их только под троян-ось
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Перекодирование русских символов вида =D0=9B в транслит"  +3 +/
Сообщение от ABATAPA email(ok) on 13-Фев-12, 08:09 
Что только не сделают люди, не желающие или не умеющие искать существующие ответы и решения...

$ echo 'N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=92=D0=B0=D1=81=D1=8F' | recode -f /QP..utf8
N;CHARSETUTF-8;ENCODINGQUOTED-PRINTABLE:Вася

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Перекодирование русских символов вида =D0=9B в транслит"  –1 +/
Сообщение от Аноним (??) on 13-Фев-12, 10:15 
> Что только не сделают люди, не желающие или не умеющие искать существующие
> ответы и решения...

Что только не делают люди, вместо простого универсального скрипта качающие, компилирующие и инсталлирующие какую-то левую софтину. Стандартным для подобных целей пока остаётся iconv, но он QUOTED-PRINTABLE и транслит не поддерживает.

> $ echo 'N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=92=D0=B0=D1=81=D1=8F' | recode -f /QP..utf8

И где здесь преобразование в транслит ???

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Перекодирование русских символов вида =D0=9B в транслит"  +1 +/
Сообщение от Cuernud on 13-Фев-12, 10:39 
> Что только не делают люди, вместо простого универсального скрипта качающие, компилирующие
> и инсталлирующие какую-то левую софтину.

А что, есть дистрибутивы, в репах которых нет recode?

> И где здесь преобразование в транслит ???

Так и не понял - ЗАЧЕМ? Чем UTF-8 не устраивает?

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Перекодирование русских символов вида =D0=9B в транслит"  +1 +/
Сообщение от Аноним (??) on 13-Фев-12, 11:58 
Не обращай внимания, каждому хочется изобрести свои велосипед и запилить статью про него на хабр^W opennet.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

9. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Kroz email(??) on 13-Фев-12, 15:05 
> Так и не понял - ЗАЧЕМ? Чем UTF-8 не устраивает?

Тем что в таком виде не заливался на телефон. Не пропускал русские буквы.
Если расскажите как залить русскую адресную книгу на телефон Fly - буду очень признателен.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

12. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Аноним (??) on 13-Фев-12, 16:21 
Этот ваш fly - совершенно левая китайчатина сляпаная на коленке. Простите уж за честность.
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

19. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Cuernud on 15-Фев-12, 09:50 
> Если расскажите как залить русскую адресную книгу на телефон Fly - буду
> очень признателен.

Кроме "выкиньте этот телефон" ничего в голову не приходит, как ни странно.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

22. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Аноним (??) on 15-Фев-12, 22:46 
Да... теперь я буду хотя-бы знать что этот fly не просто Г а совсем Г. Спасибо что предупредили.
Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

24. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от trdm (ok) on 20-Фев-12, 19:09 
У меня знакомые в рем-центре.
Их высказывание о Fly более чем нелестные.
чаще других ломаются.
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

32. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от NavDotRu on 24-Фев-12, 23:55 
Кстати не лишним было бы добавить - это не очень сложно
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Kroz email(??) on 13-Фев-12, 15:08 
> Что только не сделают люди, не желающие или не умеющие искать существующие
> ответы и решения...

Про утилиту recode не знал, спасибо.
И, да, нужен именно транслит. Наверное еще тулза какая-то есть. Если подскажите - будет потомкам в этом разделе.
И, да, задача несложная, мне проще и быстрее скрипт написать чем гуглить и что-то ставить.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

15. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от gegMOPO4 (ok) on 13-Фев-12, 17:36 
Да, есть. recode.
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

8. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Аноним (??) on 13-Фев-12, 12:15 
не нужно придумывать кодировщики, чтобы потом раскодировщики изобретать
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "Перекодирование русских символов вида =D0=9B в транслит"  –2 +/
Сообщение от Аноним (??) on 13-Фев-12, 16:19 
Эпический набор костылей и велосипедов. Да еще транслит? На нем уже даже старые бабки с кирпичами вместо телефона смски так стесняются писать. Потому что даже полные кирпичи уже давно умеют нормально работать с русским.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от dima (??) on 13-Фев-12, 16:53 
пишу только на транслите.
так как размер СМС в 2 раза большем чем на руси.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

14. "Перекодирование русских символов вида =D0=9B в транслит"  +2 +/
Сообщение от Александр email(??) on 13-Фев-12, 17:09 
попробуйте звонить, за минуту можно сказать больше чем написать
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

17. "Перекодирование русских символов вида =D0=9B в транслит"  +1 +/
Сообщение от Аноним (??) on 13-Фев-12, 23:35 
> попробуйте звонить, за минуту можно сказать больше чем написать

Такие обычно звонят, и пытаются или выпалить все в бесплатные 3 секунды, или просто сбрасывают звонок дабы им перезвонили за свой счет. Я не перезваниваю - кому надо, тот и платит. Культурные люди так себя не ведут и заботятся о удобстве собеседника.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

20. "Перекодирование русских символов вида =D0=9B в транслит"  +1 +/
Сообщение от Cuernud on 15-Фев-12, 09:52 
> Культурные люди так себя не ведут и заботятся о удобстве собеседника.

Именно. И не пишут транслитом. Сообщения, написанные транслитом (будь то SMS или e-mail), удаляю не глядя.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

34. "Перекодирование русских символов вида =D0=9B в транслит"  +1 +/
Сообщение от Аноон on 28-Фев-12, 09:58 
Транслит на ощупь определяете?
Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

38. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от А (??) on 22-Мрт-12, 12:43 
Такое впечатление, что попал в 2001 год. Fly, "позвонил и сбросил"...
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

16. "syncml"  +/
Сообщение от mee too on 13-Фев-12, 21:37 
Йода мастер syncml падавану юному использовать советует.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

18. "syncml"  +/
Сообщение от Аноним (??) on 14-Фев-12, 11:15 
а если его нет в телефоне?
Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

21. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от cvsup (ok) on 15-Фев-12, 16:30 
> echo "=D0=92=D0=B0=D1=81=D1=8F" | perl -e 'use MIME::Decoder; $decoder = new MIME::Decoder "quoted-printable"; $decoder->decode(\*STDIN, \*STDOUT);'

echo "=D0=92=D0=B0=D1=81=D1=8F" | perl -e 'use MIME::Decoder; $decoder = new MIME::Decoder "quoted-printable"; $decoder->decode(\*STDIN, \*STDOUT);' | iconv -f utf-8

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

26. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от konst email(??) on 21-Фев-12, 15:32 
echo "=D0=92=D0=B0=D1=81=D1=8F" | perl -e 'use MIME::Decoder; $decoder = new MIME::Decoder "quoted-printable"; $decoder->decode(\*STDIN, \*STDOUT);' | iconv -f utf-8 -t KOI-7 | perl -ne 'tr/[A-Z][a-z]/[a-z][A-Z]/;print;'

(для транслит)

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

27. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Аноним (??) on 21-Фев-12, 21:15 
> (для транслит)

Это совсем не транслит, даже в вашем примере вместо 'ya' выводит 'q'. Не говоря о таких буквах, как ж, ш, щ, ю, ч, ц.

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

28. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от konst email(??) on 22-Фев-12, 01:13 
>> (для транслит)
> Это совсем не транслит, даже в вашем примере вместо 'ya' выводит 'q'.
> Не говоря о таких буквах, как ж, ш, щ, ю, ч,
> ц.

1. все-таки транслит
2. самый четкий транслит. См.
echo "Вася Пупкин" |iconv -t KOI-7 | iconv -f KOI-7 -t KOI8-R (или UTF8)
3. Самый удобный трвнслит, если к нему привыкнуть, e.g. что  я=q...
:)

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

31. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Аноним (??) on 22-Фев-12, 13:38 
> 2. самый четкий транслит. См.
> echo "Вася Пупкин" |iconv -t KOI-7 | iconv -f KOI-7 -t KOI8-R

А теперь попробуйте добавить символы латиницы в строку "Вася Пупкин".

> (или UTF8)
> 3. Самый удобный трвнслит, если к нему привыкнуть, e.g. что  я=q...

Превыкайте :-)

$ echo "ж, ш, щ, ю, ч" |iconv -t KOI-7
V, [, ], @, ^

$ echo "чуш" |iconv -t KOI-7                          
^U[

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

23. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Аноним (??) on 17-Фев-12, 16:23 
Лучше если б сделали доработку модуля Template::Plugin::Translit::RU и закоммитить все это дело обратно.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

25. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от trdm (ok) on 20-Фев-12, 19:12 
Решал подобную задачу недавно:
http://trdm.byethost31.com/topic.php?id=42&page=1
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

29. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от pavlinux (ok) on 22-Фев-12, 02:44 
Митрофаныч, а ну-ка покажи народу sed-дзен-буддизм! :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

30. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Andrey Mitrofanov on 22-Фев-12, 10:47 
Уймись уже, фанклуб ходячий... И без меня всё обсудили. Рассказать что ли, как .ppd-шку из cp1251 в utf8 примерно таким же костылём перегнать? Так, никакого ж профита. B)
Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

35. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Аноним (??) on 29-Фев-12, 22:53 
Хорошая учебная статья
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

36. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от Oinari (ok) on 03-Мрт-12, 13:49 
http://www.artlebedev.ru/tools/decoder/
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

44. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от wanderer email(??) on 29-Ноя-13, 12:16 
Смотри Декодер от студии А. Лебедева http://www.artlebedev.ru/tools/decoder/advanced/
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

54. "Перекодирование русских символов вида =D0=9B в транслит"  +/
Сообщение от михаил email on 06-Окт-16, 18:14 
!/bin/sh

   src=(\\
   =D0=90 =D0=91 =D0=92 =D0=93 =D0=94 =D0=95 =D0=96 =D0=97 =D0=98 =D0=99 =D0=9A =D0=9B =D0=9C =D0=9D =D0=9E =D0=9F =D0=A0 =D0=A1 =D0=A2 =D0=A3 =D0=A4 =D0=A5 =D0=A6 =D0=A7 =D0=A8 =D0=A9 =D0=AA =D0=AB =D0=AC =D0=AD =D0=AE =D0=AF =D0=B0 =D0=B1 =D0=B2 =D0=B3 =D0=B4 =D0=B5 =D0=B6 =D0=B7 =D0=B8 =D0=B9 =D0=BA =D0=BB =D0=BC =D0=BD =D0=BE =D0=BF =D1=80 =D1=81 =D1=82 =D1=83 =D1=84 =D1=85 =D1=86 =D1=87 =D1=88 =D1=89 =D1=8A =D1=8B =D1=8C =D1=8D =D1=8E =D1=8F)
   res=(\\
      A       B     V     G        D     Ye    Zh      Z      I      Y      K      L      M      N      O      P        R       S     T     U        F      H    Ts      Ch     Sh    Sch     Ь      Y      Ь      E      Yu     Ya       a       b     v     g        d     ye    zh      z      i      y      k      l      m      n      o      p    r       s     t     u        f      h    ts      ch     sh    sch     Ь      y      Ь      e      yu     ya)

   CMD=""
   for ((A=0;A<64;A++)) ; do
       CMD=`echo "$CMD | sed -e s/${src[$A]}/${res[$A]}/g"`
   done

   CMD=`echo "cat file.vcf $CMD | sed -e s/Ь//g | sed -e s/N\\;CHARSET=UTF-8\\;ENCODING=QUOTED-PRINTABLE/N/g | less"`
   echo "$CMD"


Для раскодирования quoted-printable блоков можно использовать простой perl-скрипт:

   echo "=D0=92=D0=B0=D1=81=D1=8F" | perl -e 'use MIME::Decoder; $decoder = new MIME::Decoder "quoted-printable"; $decoder->decode(\\*STDIN, \\*STDOUT);'

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема


  Закладки на сайте
  Проследить за страницей
Created 1996-2018 by Maxim Chirkov  
ДобавитьПоддержатьВебмастеруГИД  
Hosting by Ihor