2013-06-25 12 views
12

Potrzebuję funkcji do konwertowania między znakiem (np. 'α') i jego pełną nazwą Unicode (na przykład "GREEK SMALL LETTER ALPHA") w obu kierunkach.Jak przekonwertować znak na pełną nazwę Unicode?

Rozwiązaniem, które wymyśliłem, jest wykonanie wyszukiwania w oficjalnym standardzie Unicode dostępnym online: http://www.unicode.org/Public/6.2.0/ucd/UnicodeData.txt lub raczej w jego zbuforowanej kopii lokalnej, ewentualnie wcześniej przekształconej w odpowiednią kolekcję, aby poprawić wydajność wyszukiwania).

Czy istnieje prostszy sposób na wykonanie tych konwersji? Wolałbym rozwiązanie w języku C#, ale mile widziane są również rozwiązania w innych językach, które można dostosować do C#/.NET. Dzięki!

+0

Rozwiązanie, które masz, brzmi dla mnie idealnie, szczerze mówiąc. Format pliku wygląda dość prostolinijnie i nie sądzę, żeby w strukturze było coś jeszcze. –

+0

Ten link, który wskażesz, jest podobny do pierwszego miliona i powinien łatwo zmieścić się w słowniku. Znak powinien być unikalny, więc używaj go jako klucza w Słowniku. Jeśli chodzi o opis - jeśli jest unikalny, może zawierać drugi słownik odwrotny dla prędkości, ale to podwoi pamięć. – Paparazzi

+0

@Blam "tylko jak pierwszy milion" (dokładniej 1114109) to ** wszystkie z nich **. –

Odpowiedz

0

jeśli nie chcesz zachować tabeli nazw Unicode w pamięci, po prostu przygotuj plik tekstowy, w którym przesunięcie wartości Unicode pomnożone przez max długość nazwy Unicode wskaże nazwę Unicode. dla maksymalnej długości 4 bajtów nie będzie to mniej niż kilka megabajtów. Jeśli chcesz mieć bardziej kompaktową implementację, wtedy adres przesunięcia grupowego w pliku do nazwy unicode na początku pliku indeksowanego wartością Unicode, następnie skorzystaj z bardziej zwartej tabeli nazw. ale musisz przygotować taki plik, chociaż nie jest to trudne.

+0

Wymaganie to oba kierunki. – Paparazzi

+0

Tak, piszesz, możemy stworzyć kolejny plik z indeksem równym wartościom mieszającym nazw unicode :-). choć rozwiązanie odwołujące się do komentarza do pytania używa gotowej biblioteki słownika, która jest oczywiście lepsza niż robienie roweru od zera. ale zawsze lubię sztukę projektowania struktur danych. –

Powiązane problemy