2008-10-27 10 views
7

Jaki jest najprostszy sposób przekonwertować kodowy Unicode na UTF-8 sekwencji bajtów w C? Jedynym sposobem, który przychodzi na myśl, jest użycie iconv do mapowania ze strony kodowej UTF-32LE do UTF-8, ale to wydaje się przesadą.Najprostszy sposób przekonwertować Unicode kodowy w UTF-8

+0

skończyło się dzieje z iconv tak. To może wydawać się przesadą, ale wydaje się też jedynym realnym rozwiązaniem bez wprowadzania zewnętrznych zależności. –

+0

Dlaczego więc nie przyjąć odpowiedzi @ JesperE i nie przegłosować jej. – tvanfosson

+5

Myślałem, że "już nie istotne" jest używane, gdy błąd w produkcie jest naprawiony, lub lepsze narzędzie zostało wprowadzone, a nie gdy pytający nie jest już zainteresowany odpowiedzią ... –

Odpowiedz

7

konwersji Unicode nie jest prostym zadaniem. Używanie iconv nie wydaje mi się przesadą. Być może istnieje wersja biblioteki iconv, której możesz użyć, aby uniknąć wywołania system(), jeśli tego właśnie chcesz uniknąć.

+0

Już planowałem korzystać z biblioteki. –

+1

W tym kierunku to niezwykle proste zadanie. Żadna biblioteka nie jest potrzebna. Ponadto 'iconv' odnosi się zarówno do interfejsu C, jak i programu narzędziowego w POSIX. Podejrzewam, że OP mówił o interfejsie C, co byłoby bardzo dobrym rozwiązaniem, ale samo napisanie go też nie jest trudne. Jest to drugi kierunek (UTF-8 do współrzędnych kodowych), który łatwo zepsuć. –

3

UTF-8 działa na zasadzie kodowania długość kodowanego kodowy do najwyższych bitów zakodowanych bajtów. zobacz http://en.wikipedia.org/wiki/UTF-8#Description

Znalazłem tę małą funkcję w C tutaj http://www.deanlee.cn/programming/convert-unicode-to-utf8/, nie przetestowałem tego chociaż.

+0

Należy zauważyć, że ten kod obsługuje tylko punkty kodowe pod 0x10000 (ponieważ wchar_t w systemie Windows to tak naprawdę UTF-16). –

+1

Link do kodu w maszynie powrotnej: http://web.archive.org/web/20100305210636/http://www.deanlee.cn/programming/convert-unicode-to-utf8/ – Eloff

5

Czy mogę zasugerować ICU? Jest to rozsądny "standardowy w branży" sposób radzenia sobie z problemami i18n.

Nie używałem wersji c sobie, ale podejrzewam ucnv_fromUnicode może być funkcja jesteś po.

+0

Nie zamierzam wprowadzić zależności na nowym zestawie bibliotek nie dostarczonych przez system tylko dla tego zadania. Dzięki za sugestię. –

Powiązane problemy