Как преобразовать поток байтов в другую кодировку? - PullRequest
5 голосов
/ 07 августа 2010

Я пытаюсь преобразовать поток байтов с помощью MultiByteToWideChar () WinAPI-функции.

Документация говорит, что функция завершается ошибкой с ERROR_NO_UNICODE_TRANSLATION в неполных строках (нет завершающего байта в многобайтовой кодированной строке),Как я могу предотвратить эту ошибку?Единственный способ, который приходит на ум, - это не преобразовывать последний многобайтовый символ входного буфера (используя IsDBCSLeadByteEx () , чтобы найти его).

Существуют ли лучшие решения для преобразования потока байтов

1 Ответ

2 голосов
/ 19 октября 2010

Мне кажется, что вы можете просто использовать CharNextExA , чтобы перейти к следующей позиции символа во входном потоке.Таким образом, вы можете получить некоторые символы и преобразовать их вместе в строку UNICODE в отношении MultiByteToWideChar .После того, как у вас есть текстовый фрагмент UNICODE, вы можете преобразовать его в другую кодовую страницу, используя WideCharToMultiByte .

ОБНОВЛЕНО : Я уверен, что процесс получения потока вводаданные гораздо медленнее, чем при декодировании данных относительно CharNextExA , MultiByteToWideChar и WideCharToMultiByte .Например, если вы используете буфер в стеке, такой как WCHAR szBuffer[4096] и TCHAR szDestBuffer[4096], тогда вы сможете очень быстро декодировать 1К входных данных.Поэтому я полагаю, что общее время работы всей вашей программы будет почти равнозначно использованию этих трех функций.

Более того, я не уверен, что у вас есть какая-либо альтернатива.Я не знаю ни одного надежного способа начать декодирование текста с начала или в конце текста.Вероятно, у других людей есть другая идея ...

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