2009-01-11 16 views
16

Szukam przenośnej i łatwej w użyciu biblioteki ciągów dla C/C++, która pomaga mi pracować z wejściem/wyjściem Unicode. W najlepszym przypadku będzie przechowywać ciągi w pamięci w UTF-8 i pozwoli mi konwertować ciągi znaków z ASCII na UTF-8/UTF-16 iz powrotem. Nie potrzebuję o wiele więcej poza tym (dobra licencja nie zaszkodzi). Widziałem, że C++ ma nagłówek <locale>, ale wygląda na to, że działa tylko na wchar_t, który może, ale nie musi, być kodowany w UTF-16, i nie jestem pewien, jak dobrze to jest.Przenośna i prosta biblioteka ciągów znaków Unicode dla C/C++?

Przypadki użycia są na przykład: W systemie Windows interfejsy API unikodu oczekują ciągów znaków UTF-16 i muszę przekonwertować ciągi ASCII lub UTF-8, aby przekazać je do interfejsu API. To samo dotyczy parsowania XML, które może pochodzić z UTF-16, ale w rzeczywistości chcę tylko wewnętrznie przetwarzać z UTF-8 (lub, jeśli o to chodzi, jeśli przełączyłem się wewnętrznie na UTF-16, potrzebuję konwersji na to tak czy inaczej).

Do tej pory rzuciłem okiem na ICU, który jest dość duży. Co więcej, chce być zbudowany przy użyciu własnych plików projektu, podczas gdy ja wolałabym bibliotekę, dla której jest albo projekt CMake, albo który jest łatwy do zbudowania (coś jak skompilowanie wszystkich tych plików .cc, link i good to go) , zamiast wysyłać coś dużego jak ICU wzdłuż mojej aplikacji.

Czy znasz taką bibliotekę, która również jest utrzymywana? W końcu wydaje się to być całkiem podstawowym problemem.

Odpowiedz

19

UTF8-CPP wydaje się być dokładnie tym, czego potrzebujesz.

+0

Jakiś pomysł, jak to dobrze? Właśnie na to spojrzałam, wydaje się być naprawdę prosty, ale chciałbym usłyszeć kilka opinii na ten temat. – Anteru

+3

Cóż, nie usłyszysz ode mnie żadnych bezstronnych opinii, bo jestem autorem :) Jednak nie miałem żadnych otwartych błędów przez ponad rok, a ludzie faktycznie go używają (250-300 pobrań na miesiąc), więc uważam, że nie jest tak źle :) –

+1

+1 dla UTF8-CPP. Używam go wszędzie tam, gdzie muszę obsługiwać ciągi znaków UTF8 w moim kodzie C++ (i czasami utf16). Bardzo prosty w obsłudze i bardzo miły C++ API. –

2

Zalecam przejrzenie biblioteki GNU iconv.

+1

iconv daje tylko możliwość konwersji pomiędzy różnymi kodowaniami. Nie masz takich funkcji, jak len(), konwersja przypadku itp. –

Powiązane problemy