Jaka jest najlepsza praktyka przetwarzania Unicode w C ++?
Jaka jest najlepsza praktyka przetwarzania Unicode w C ++?
Odpowiedzi:
is_alpha
chyba że jest to pożądana definicja.string
jeśli zależy Ci na poprawności, zawsze używaj do tego biblioteki Unicode.Jeśli nie zależy Ci na wstecznej kompatybilności z poprzednimi standardami C ++, obecny standard C ++ 11 ma wbudowaną obsługę Unicode: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
Tak więc naprawdę najlepszą praktyką przy przetwarzaniu Unicode w C ++ byłoby użycie do tego wbudowanych udogodnień. Jednak nie zawsze jest to możliwe w przypadku starszych baz kodu, ponieważ standard jest obecnie tak nowy.
EDYCJA: Aby wyjaśnić, C ++ 11 jest świadomy Unicode, ponieważ ma teraz obsługę literałów Unicode i ciągów Unicode. Jednak biblioteka standardowa ma tylko ograniczoną obsługę przetwarzania i konwersji Unicode. Dla Twoich aktualnych potrzeb może to wystarczyć. Jeśli jednak musisz teraz wykonać duże podnoszenie ciężarów, nadal możesz potrzebować czegoś takiego jak OIOM, aby uzyskać bardziej dogłębne przetwarzanie. Obecnie trwają prace nad kilkoma propozycjami włączenia solidniejszej obsługi konwersji tekstu między różnymi kodowaniami. Domyślam się (i mam nadzieję), że będzie to część następnego raportu technicznego .
Nasza firma (i inni) korzystają z biblioteki Open Source Internation Components for Unicode (ICU), pierwotnie opracowanej przez Taligent.
Obsługuje ciągi znaków, ustawienia regionalne, konwersje, daty / godziny, sortowanie, transformacje itp. glin.
Zacznij od Przewodnika użytkownika na oddziale intensywnej terapii
Oto lista kontrolna dotycząca programowania w systemie Windows:
Spójrz na porównanie ciągów bez uwzględniania wielkości liter w C ++
To pytanie zawiera łącze do dokumentacji firmy Microsoft w formacie Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Jeśli spojrzysz na lewą stronę nawigacji w witrynie MSDN obok tego artykułu, powinieneś znaleźć wiele informacji dotyczących funkcji Unicode. Jest to część rozdziału poświęconego „Kodowaniu znaków” ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Zawiera następujące podsekcje:
Chociaż może to nie być najlepsza praktyka dla wszystkich, możesz napisać własne procedury C ++ UNICODE, jeśli chcesz!
Właśnie skończyłem to robić w weekend. Wiele się nauczyłem, chociaż nie gwarantuję, że jest w 100% wolny od błędów, wykonałem wiele testów i wydaje się, że działa poprawnie.
Mój kod podlega nowej licencji BSD i można go znaleźć tutaj:
http://code.google.com/p/netwidecc/downloads/list
Nazywa się WSUCONV i jest dostarczany z przykładowym programem main (), który konwertuje między UTF-8, UTF-16 i standardowym ASCII. Jeśli wyrzucisz główny kod, masz fajną bibliotekę do czytania / pisania UNICODE.
Jak zostało powiedziane powyżej, biblioteka jest najlepszym rozwiązaniem w przypadku korzystania z dużego systemu. Jednak czasami chcesz sobie z tym poradzić (być może dlatego, że biblioteka wykorzystywałaby wiele zasobów, takich jak mikrokontroler). W takim przypadku potrzebujesz prostej biblioteki, z której możesz skopiować części na rzeczy, których faktycznie potrzebujesz.
Przykładowy kod Willowa Schlangera wydaje się dobry (zobacz jego odpowiedź, aby uzyskać więcej informacji).
Znalazłem też inny, który ma mniejszy kod, ale brakuje mu pełnego sprawdzania błędów i obsługuje tylko UTF-8, ale łatwiej było z niego wyjąć części.
Oto lista wbudowanych bibliotek, które wydają się przyzwoite.
Spójrz na zalecenia UTF-8 Everywhere
string
jako dane binarne.