Картинка блога

Дошли руки перенести таблицу Unidecode для работы с C#. Скачать ее можно с Codeplex. Изначально, unidecode был написан на Perl, разработка которого, прекратилась на версии 0.04. Бесконечно ценной остается таблица переводов, поекывающая практически весь уникод. По этому, этот код был портирован на разные языки программирования: Python, PHP, Ruby и теперь — .NET.
Решение реализовано как метод расширения String.Unidecode() Работает он следующим образом:

("\u5317\u4EB0").Unidecode() == "Bei Jing "

Точно, также работает и с кириллицей:

Assert.AreEqual("Rabota s kirilitsiei", "Работа с кирилицей".Unidecode());

Транслитерация помогает в тех случаях, если программа с которой вы контактируете не поддерживает Unicode. До недавних пор это был, например URL, но и сейчас проблема сохраняется для многоязычных сайтов (URL на латинице выглядит понятней, чем, иероглифы или кириллица, для человека, не знакомого с жтими языками. Вместо того чтобы показывать знаки вопроса («?») или hex последовательности можно осуществить перевод в латиницу.
Транслитерация может быть выполнена только в одну сторону. 65535 символов могут превратится в 255 — но не наоборот. Таблица отлично работает на большинстве языков, однако, как говорит автор проекта на Perl, тексты на японском и тайском — могут быть искажены. Это связанно с лингвистической составляющей языка.

Скачать библиотеку и исходной код:
Версия 0.04 — взята из той-же версии реализации на Python.

Метки:, ,

3 комментария в “Unidecode Sharp. ASCII транслитерация для .NET”

  1. Привет, я тут чутка допилил твой порт, чтобы он кирилицу транслитерировал по ГОСТу.

    Могу залить изменения на кодплекс.

  2. да, конечно, свяжусь с вами по мейлу, чтобы дать доступ.

Trackbacks/Pingbacks

  1. Транслитерация RUS 2 LAT на C#

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>