The OpenNET Project / Index page

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



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

"Раздел полезных советов: Перекодирование русских символов ви..."  –1 +/
Сообщение от auto_tips (??), 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.me/tips/info/2665.shtml

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

Оглавление

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

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

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

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

4. Сообщение от ABATAPAemail (ok), 13-Фев-12, 08:09   +3 +/
Что только не сделают люди, не желающие или не умеющие искать существующие ответы и решения...

$ 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:Вася

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #5, #10

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #6, #32

6. Сообщение от Cuernud (?), 13-Фев-12, 10:39   +2 +/
> Что только не делают люди, вместо простого универсального скрипта качающие, компилирующие
> и инсталлирующие какую-то левую софтину.

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5 Ответы: #7, #9

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

8. Сообщение от Аноним (-), 13-Фев-12, 12:15   +/
не нужно придумывать кодировщики, чтобы потом раскодировщики изобретать
Ответить | Правка | Наверх | Cообщить модератору

9. Сообщение от Krozemail (??), 13-Фев-12, 15:05   +/
> Так и не понял - ЗАЧЕМ? Чем UTF-8 не устраивает?

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #12, #19

10. Сообщение от Krozemail (??), 13-Фев-12, 15:08   +/
> Что только не сделают люди, не желающие или не умеющие искать существующие
> ответы и решения...

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #15

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

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

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #20, #38

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

19. Сообщение от Cuernud (?), 15-Фев-12, 09:50   +/
> Если расскажите как залить русскую адресную книгу на телефон Fly - буду
> очень признателен.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #22

20. Сообщение от Cuernud (?), 15-Фев-12, 09:52   +1 +/
> Культурные люди так себя не ведут и заботятся о удобстве собеседника.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #34

21. Сообщение от cvsup (ok), 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

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

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

23. Сообщение от Аноним (-), 17-Фев-12, 16:23   –1 +/
Лучше если б сделали доработку модуля Template::Plugin::Translit::RU и закоммитить все это дело обратно.
Ответить | Правка | Наверх | Cообщить модератору

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

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

26. Сообщение от konstemail (??), 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;'

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #21 Ответы: #27

27. Сообщение от Аноним (-), 21-Фев-12, 21:15   +/
> (для транслит)

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26 Ответы: #28

28. Сообщение от konstemail (??), 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...
:)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #27 Ответы: #31

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

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

31. Сообщение от Аноним (-), 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[

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

32. Сообщение от NavDotRu (?), 24-Фев-12, 23:55   +/
Кстати не лишним было бы добавить - это не очень сложно
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

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

35. Сообщение от Аноним (-), 29-Фев-12, 22:53   +/
Хорошая учебная статья
Ответить | Правка | Наверх | Cообщить модератору

36. Сообщение от Oinari (ok), 03-Мрт-12, 13:49   +/
http://www.artlebedev.ru/tools/decoder/
Ответить | Правка | Наверх | Cообщить модератору

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

44. Сообщение от wandereremail (??), 29-Ноя-13, 12:16   +/
Смотри Декодер от студии А. Лебедева http://www.artlebedev.ru/tools/decoder/advanced/
Ответить | Правка | Наверх | Cообщить модератору

54. Сообщение от михаилemail (?), 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);'

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

55. Сообщение от Александр (??), 25-Дек-20, 13:36   +/
D0%BE%D1%81%
Ответить | Правка | Наверх | Cообщить модератору

56. Сообщение от Александр (??), 25-Дек-20, 13:39   +/
region_id=336&
order_id=89471357&title=%D0%92%D0%BE%D0%BF%D1%80
%D0%BE%D1%81+%D0%BF%D0%BE+%D0%B7%D0%B0
%D0%BA%D0%B0%D0%B7%D1%83+%2389471357) ребят помогите фотку открыть или коорды здесь?
Ответить | Правка | Наверх | Cообщить модератору

57. Сообщение от Иванemail (??), 07-Сен-21, 18:31   +/
скинули вот этот код или что это хз, помогите расшифровать: d0 92 d0 b0 d0 bd d1 8f 20 d1 81 d0 be d1 81 d0 b8 20 d1 85 d1 83 d0 b9
Ответить | Правка | Наверх | Cообщить модератору

59. Сообщение от Винг (?), 09-Окт-23, 19:05   +/
echo "=D0=92=D0=B0=D1=81=D1=8F" | perl -e 'use MIME::Decoder; $decoder = new MIME::Decoder "quoted-printable"; $decoder->decode(\\*STDIN, \\*STDOUT);'
Ответить | Правка | Наверх | Cообщить модератору


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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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