Отказоустойчивое преобразование между различными кодировками символов - PullRequest
0 голосов
/ 15 мая 2009

Мне нужно преобразовать строки из одной кодировки (UTF-8) в другую. Проблема в том, что в целевой кодировке у нас нет всех символов из исходной кодировки, и в такой ситуации происходит сбой функции libc iconv (3) Я хочу иметь возможность выполнять преобразование, но в выходной строке эти проблемные символы были заменены каким-либо символом, скажем «?».

Язык программирования - C или C ++.

Есть ли способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

Попробуйте добавить "// TRANSLIT" или "// IGNORE" в конец строки набора символов назначения. Обратите внимание, что это поддерживается только в библиотеке GNU C.

С iconv_open (3) :

   //TRANSLIT
          When the string "//TRANSLIT" is appended to tocode, translitera‐
          tion is activated.  This means that when a character  cannot  be
          represented  in the target character set, it can be approximated
          through one or several similarly looking characters.

   //IGNORE
          When the string "//IGNORE" is  appended  to  tocode,  characters
          that  cannot  be represented in the target character set will be
          silently discarded.

Альтернативно, вручную пропустите символ и вставьте подстановку в вывод, когда вы получите -EILSEQ от iconv (3) .

0 голосов
/ 15 мая 2009

Регулярное выражение на основе диапазонов переводимых источников, используемых для замены соответствующего заполнителя на любые неподходящие символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...