локализация строк в C-коде
Добавлено: 05 фев 2013, 00:02
Опять у меня мельком выплыла тема локализации русскоязычных строк в программах на C.
Тема освещена в литературе крайне плохо ... потому, что народ изучает C по переводным учебникам, а тем вполне хватает ASCIIZ и типа данных char*.
Но для работы с русскоязычными строками временами не хватает представления char[].
И тогда возникает иногда необходимость применять:
1. "широкие" символы wchar_t, которые являются (в POSIX) прямым изображением UNICODE кодировки UTF-32, и, естественно, каждый символ занимает 4 байта;
2. многобайтные представления, которые хоть и загружены в char[], но в кодировке UTF-8 (т.е. тоже UNICODE, но в другой кодировке); они непригодны для непосредственной обработки строковыми функциями + функции преобразований (mbtowc(), wctomb(), mblen(), mbrtowc(), wcrtomb(), mbrlen() и т.д.), для преобразования в wchat_t[] и обратно (См.: Многобайтовые символы, mbchar(3C))
Но часто можно работать в программе С со строками char[] и не прибегая к локализованным формам.
Вот я и решил для себя освежить в памяти (последний раз писал что-то связанное с этим году в 2008-м):
- когда достаточно char[], а когда и потребуются локализованные представления;
- как работать с локализованными строками простейшим образом.
Тема освещена в литературе крайне плохо ... потому, что народ изучает C по переводным учебникам, а тем вполне хватает ASCIIZ и типа данных char*.
Но для работы с русскоязычными строками временами не хватает представления char[].
И тогда возникает иногда необходимость применять:
1. "широкие" символы wchar_t, которые являются (в POSIX) прямым изображением UNICODE кодировки UTF-32, и, естественно, каждый символ занимает 4 байта;
2. многобайтные представления, которые хоть и загружены в char[], но в кодировке UTF-8 (т.е. тоже UNICODE, но в другой кодировке); они непригодны для непосредственной обработки строковыми функциями + функции преобразований (mbtowc(), wctomb(), mblen(), mbrtowc(), wcrtomb(), mbrlen() и т.д.), для преобразования в wchat_t[] и обратно (См.: Многобайтовые символы, mbchar(3C))
Но часто можно работать в программе С со строками char[] и не прибегая к локализованным формам.
Вот я и решил для себя освежить в памяти (последний раз писал что-то связанное с этим году в 2008-м):
- когда достаточно char[], а когда и потребуются локализованные представления;
- как работать с локализованными строками простейшим образом.