ICU C ++ Преобразование кодировок - PullRequest
1 голос
/ 10 сентября 2011

Насколько я понимаю, разные локали имеют разные кодировки. С ICU я хотел бы преобразовать из UnicodeString в кодировку текущей локали и обратно. В частности, я использую библиотеку файловой системы Boost, которая, в свою очередь, использует либо кодировку UTF-16 Windows, либо кодировку UTF-8 Linux.

Есть ли способ надежно сделать это с помощью ICU или другой библиотеки?

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Вы можете использовать ICU, но вы можете найти iconv() достаточным, что намного проще в настройке и эксплуатации (и является частью Posix, и легко доступно для Windows).

В любой из этих библиотек вам необходимо преобразовать строку Юникода в широкую строку. В iconv() эта цель называется WCHAR_T. Если у вас есть широкий символ, вы можете использовать его непосредственно в Windows.

В Linux вы можете либо использовать wcstombs() для преобразования широких символов в многобайтовую кодировку системы (и локали) (не забывайте setlocale(LC_CTYPE, "");), либо, если вы уверены, что вам нужен UTF-8, а не системная кодировка, вы можете преобразовать исходную строку в UTF-8 напрямую (также с любой библиотекой).

Может быть, вы найдете моего поста моего, чтобы обеспечить некоторую предысторию.

1 голос
/ 10 сентября 2011

Используйте iconv. http://www.gnu.org/s/libiconv/documentation/libiconv/iconv.1.html Он предустановлен в большинстве систем GNU.

...