2013-06-25 3 views
12

Мне нужны функции для преобразования между символом (например, 'α') и его полное имя Юникода (например, "GREEK SMALL LETTER ALPHA") в обоих направлениях.Как преобразовать символ в его полное имя Unicode?

Решение, которое я разработал, состоит в том, чтобы выполнить поиск в официальном стандарте Unicode, доступном в Интернете: http://www.unicode.org/Public/6.2.0/ucd/UnicodeData.txt, или, скорее, в его кешированной локальной копии, возможно, переделанной в подходящую коллекцию заранее, чтобы улучшить производительность поиска).

Есть ли более простой способ сделать эти преобразования? Я бы предпочел решение на C#, но также приветствуются решения на других языках, которые могут быть адаптированы к C#/.NET. Благодаря!

+0

Решение, которое у вас есть, прекрасно звучит для меня, если быть честным. Формат файла выглядит достаточно просто, и я не думаю, что в этой области есть что-то еще. –

+0

Эта ссылка, на которую вы указываете, похожа только на первые 1 миллион и должна легко вписываться в словарь. Символ должен быть уникальным, поэтому используйте его как ключ в словаре. Что касается описания - если он уникален, он может включать второй обратный словарь для скорости, но это удвоит память. – Paparazzi

+0

@ Blam «только как первый миллион» (точнее, 1114109) ** ** все **. –

ответ

0

Если вы не хотите, чтобы таблица имен Unicode сохранялась в памяти, просто подготовьте текстовый файл, где смещение значения unicode, умноженное на максимальное имя длины юникода, укажет на имя юникода. для максимальной длины 4 байта это не будет mroe чем несколько мегабайт. Если вы хотите иметь более компактную реализацию, тогда смещайте смещенный адрес в файле в имена юникода в начале файла, индексированного по значению unicode, а затем получите более компактную таблицу имен. но вы должны подготовить такой файл, хотя это не сложно.

+0

Требование - это оба направления. – Paparazzi

+0

Да, вы пишете, мы можем сделать еще один файл с индексом, равным хэш-значениям имен юникода :-). хотя решение, упомянутое в комментарии к вопросу, использует готовый словарь lib, который, конечно, лучше, чем делать велосипед с нуля. но я всегда наслаждаюсь искусством дизайна структуры данных. –