The OpenNET Project / Index page

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

Перекодирование русских символов вида =D0=9B в транслит
Данная задача появилась когда потребовалось перенести адресную книгу с одного
телефона в другой. Использовался 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);'
 
12.02.2012 , Автор: Kroz
Ключи: decode, vcf / Лицензия: CC-BY
Раздел:    Корень / Пользователю / Русификация

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним (-), 21:47, 12/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сильно. Но я для этих же целей использовал машину с виндовс и программы от производителей.
    PROFIT
     
     
  • 2.2, Crazy Alex (ok), 23:17, 12/02/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Понимаете, у приличного пользователя (Power User который), не говоря о программисте/сисадмине вышеописанные манипуляции замут меньше времени, чем установка "программ от производителей".
     
     
  • 3.3, JL2001 (ok), 04:19, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ...и установка виндовс чтоб установить программы грёбанного производителя который выпускает их только под троян-ось
     

  • 1.4, ABATAPA (ok), 08:09, 13/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +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:Вася

     
     
  • 2.5, Аноним (-), 10:15, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Что только не сделают люди, не желающие или не умеющие искать существующие
    > ответы и решения...

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

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

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

     
     
  • 3.6, Cuernud (?), 10:39, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Что только не делают люди, вместо простого универсального скрипта качающие, компилирующие
    > и инсталлирующие какую-то левую софтину.

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

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

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

     
     
  • 4.7, Аноним (-), 11:58, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не обращай внимания, каждому хочется изобрести свои велосипед и запилить статью про него на хабр^W opennet.
     
  • 4.9, Kroz (??), 15:05, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Так и не понял - ЗАЧЕМ? Чем UTF-8 не устраивает?

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

     
     
  • 5.12, Аноним (-), 16:21, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Этот ваш fly - совершенно левая китайчатина сляпаная на коленке. Простите уж за честность.
     
  • 5.19, Cuernud (?), 09:50, 15/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Если расскажите как залить русскую адресную книгу на телефон Fly - буду
    > очень признателен.

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

     
     
  • 6.22, Аноним (-), 22:46, 15/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да... теперь я буду хотя-бы знать что этот fly не просто Г а совсем Г. Спасибо что предупредили.
     
     
  • 7.24, trdm (ok), 19:09, 20/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    У меня знакомые в рем-центре.
    Их высказывание о Fly более чем нелестные.
    чаще других ломаются.
     
  • 3.32, NavDotRu (?), 23:55, 24/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати не лишним было бы добавить - это не очень сложно
     
  • 2.10, Kroz (??), 15:08, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Что только не сделают люди, не желающие или не умеющие искать существующие
    > ответы и решения...

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

     
     
  • 3.15, gegMOPO4 (ok), 17:36, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да, есть. recode.
     

  • 1.8, Аноним (-), 12:15, 13/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    не нужно придумывать кодировщики, чтобы потом раскодировщики изобретать
     
  • 1.11, Аноним (-), 16:19, 13/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Эпический набор костылей и велосипедов. Да еще транслит? На нем уже даже старые бабки с кирпичами вместо телефона смски так стесняются писать. Потому что даже полные кирпичи уже давно умеют нормально работать с русским.
     
  • 1.13, dima (??), 16:53, 13/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    пишу только на транслите.
    так как размер СМС в 2 раза большем чем на руси.
     
     
  • 2.14, Александр (??), 17:09, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    попробуйте звонить, за минуту можно сказать больше чем написать
     
     
  • 3.17, Аноним (-), 23:35, 13/02/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > попробуйте звонить, за минуту можно сказать больше чем написать

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

     
     
  • 4.20, Cuernud (?), 09:52, 15/02/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Культурные люди так себя не ведут и заботятся о удобстве собеседника.

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

     
     
  • 5.34, Аноон (?), 09:58, 28/02/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Транслит на ощупь определяете?
     
  • 4.38, А (??), 12:43, 22/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Такое впечатление, что попал в 2001 год. Fly, "позвонил и сбросил"...
     

  • 1.16, mee too (?), 21:37, 13/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Йода мастер syncml падавану юному использовать советует.
     
     
  • 2.18, Аноним (-), 11:15, 14/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    а если его нет в телефоне?
     

  • 1.21, cvsup (ok), 16:30, 15/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > 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

     
     
  • 2.26, konst (??), 15:32, 21/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    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;'

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

     
     
  • 3.27, Аноним (-), 21:15, 21/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > (для транслит)

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

     
     
  • 4.28, konst (??), 01:13, 22/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> (для транслит)
    > Это совсем не транслит, даже в вашем примере вместо 'ya' выводит 'q'.
    > Не говоря о таких буквах, как ж, ш, щ, ю, ч,
    > ц.

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

     
     
  • 5.31, Аноним (-), 13:38, 22/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > 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[

     

  • 1.23, Аноним (-), 16:23, 17/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лучше если б сделали доработку модуля Template::Plugin::Translit::RU и закоммитить все это дело обратно.
     
  • 1.25, trdm (ok), 19:12, 20/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Решал подобную задачу недавно:
    http://trdm.byethost31.com/topic.php?id=42&page=1
     
  • 1.29, pavlinux (ok), 02:44, 22/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Митрофаныч, а ну-ка покажи народу sed-дзен-буддизм! :)
     
     
  • 2.30, Andrey Mitrofanov (?), 10:47, 22/02/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Уймись уже, фанклуб ходячий... И без меня всё обсудили. Рассказать что ли, как .ppd-шку из cp1251 в utf8 примерно таким же костылём перегнать? Так, никакого ж профита. B)
     

  • 1.35, Аноним (-), 22:53, 29/02/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хорошая учебная статья
     
  • 1.36, Oinari (ok), 13:49, 03/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    http://www.artlebedev.ru/tools/decoder/
     
  • 1.44, wanderer (??), 12:16, 29/11/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Смотри Декодер от студии А. Лебедева http://www.artlebedev.ru/tools/decoder/advanced/
     
  • 1.54, михаил (?), 18:14, 06/10/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    !/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);'

     
  • 1.55, Александр (??), 13:36, 25/12/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    D0%BE%D1%81%
     
  • 1.56, Александр (??), 13:39, 25/12/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    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) ребят помогите фотку открыть или коорды здесь?
     
  • 1.57, Иван (??), 18:31, 07/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    скинули вот этот код или что это хз, помогите расшифровать: d0 92 d0 b0 d0 bd d1 8f 20 d1 81 d0 be d1 81 d0 b8 20 d1 85 d1 83 d0 b9
     
  • 1.59, Винг (?), 19:05, 09/10/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    echo "=D0=92=D0=B0=D1=81=D1=8F" | perl -e 'use MIME::Decoder; $decoder = new MIME::Decoder "quoted-printable"; $decoder->decode(\\*STDIN, \\*STDOUT);'
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




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

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