Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将字节流转换为另一种编码?_C_Winapi - Fatal编程技术网

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

C 如何将字节流转换为另一种编码?,c,winapi,C,Winapi,我正在尝试使用WinAPI函数转换字节流 文档中说,函数失败,在不完整的字符串(多字节编码的字符串中没有尾随字节)上出现错误。如何防止此错误?想到的唯一方法是不要转换输入缓冲区的最后一个多字节字符(使用来定位它) 是否有更好的解决方案来转换字节流?在我看来,您可以使用它来移动到输入流中的下一个字符位置。通过这种方式,您可以获取一些字符,并将它们转换为UNICODE字符串中的字符。获得UNICODE文本片段后,可以使用在另一个代码页中转换它 更新:我确信接收输入数据流的过程比解码与和相关的数据要慢

我正在尝试使用WinAPI函数转换字节流

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


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

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

更新:我确信接收输入数据流的过程比解码与和相关的数据要慢得多。例如,如果您在堆栈上使用一个缓冲区,如
WCHAR szBuffer[4096]
TCHAR szDestBuffer[4096]
,那么您将能够非常快速地解码1K的输入数据。因此,我假设整个程序的总工作时间将与这三个函数的使用时间几乎成反比


此外,我不确定你是否有其他选择。我不知道有什么可靠的方法可以从文章的开头到结尾开始解码。可能其他人有另一个想法…

您使用哪些代码页?您以何种形式接收数据?我希望从开始到结束,而不是相反。该代码应适用于Windows平台支持的所有代码页。我以多字节或单字节编码接收数据,并希望在内部以广泛的形式对其进行处理,在输出时(处理后)将其转换为特定于语言环境的编码。我需要更有效的方法-数据块非常大,我不想为每个符号调用函数。有没有一种方法可以减少调用的数量?在我看来,如果您希望支持Windows平台支持的所有代码页,那么另一种方法是不可能的。在
IsDBCSLeadByteEx
的文档中,您可以看到:“前导字节值特定于每个不同的DBC。某些字节值可以在单个代码页中显示为DBCS字符的前导字节和尾字节。因此,IsDBCSLeadByteEx只能指示潜在的前导字节值。”。因此,使用Charnextex对数据进行顺序扫描似乎是唯一安全的方法。只需验证您是否会因使用
CharNextExA
而进行任何性能更改。它很快就消失了
CharPrevExA
使用CharPrevExA()分析10000字节缓冲区末尾的10个字节的尾部是否比使用charnextex()处理整个缓冲区慢?将字符中间部分作为lpCurrentChar参数,CharPrevExA能正常工作吗?@Basilevs:我以前写过,你应该使用
charnextex
,因为
CharPrevExA
速度很慢。只有在使用正确的字符begin开始时,
charnextex
CharPrevExA
才起作用。所以你必须从函数中使用on。由于性能原因,您应该使用
charnextex