如何将字节流转换为另一种编码?

时间:2010-08-07 13:30:01

标签: c winapi

我正在尝试使用MultiByteToWideChar() WinAPI函数转换字节流。

文档说,函数在不完整的字符串上失败并且ERROR_NO_UNICODE_TRANSLATION(多字节编码字符串中没有尾随字节)。如何防止此错误?想到的唯一方法是不转换输入缓冲区的最后一个多字节字符(使用IsDBCSLeadByteEx()来定位它)。

是否有更好的解决方案来转换字节流?

1 个答案:

答案 0 :(得分:2)

在我看来,您可以使用CharNextExA移动到输入流中的下一个字符位置。通过这种方式,你可以获得一些字符,并在MultiByteToWideChar的UNICODE字符串中一起转换。获得UNICODE文本片段后,可以使用WideCharToMultiByte在另一个代码页中将其转换。

更新:我确信接收输入数据流的过程要慢得多,因为对CharNextExAMultiByteToWideChar和{的数据进行解码{3}}。例如,如果您在堆栈上使用缓冲区,如WCHAR szBuffer[4096]TCHAR szDestBuffer[4096],那么您将能够非常快速地解码1K的输入数据。因此,我认为整个程序的总工作时间将几乎从这三个函数的使用中缩进。

而且,我不确定你有什么选择。我不知道从文本末尾开始解码文本的任何可靠方法。可能其他人有另一个想法......