宽字符到多字节问题

Posted

技术标签:

【中文标题】宽字符到多字节问题【英文标题】:Wide char to multibyte issue 【发布时间】:2014-10-31 07:05:35 【问题描述】:

在我的一个项目中,我需要在 Windows C++ 中支持 UTF-8。

当前代码使用wcstombs,其中中文无法正确转换。我用WideCharToMultiByte 替换了wcstombs。经过测试,这在 Windows 7 和 Windows XP SP3 中运行良好。

但是在一台旧机器上安装了带有中文或捷克语语言包的 Windows XP SP3。我知道这也会影响注册表。应用程序的行为有所不同。

当我在操作员重载<< 时使用wcstombs 时,它工作正常。当我同时使用WideCharToMultiByte 时,它无法按预期工作。

不更改注册表设置(安装语言包),WideCharToMultiByte 工作正常。

我认为语言包安装会影响影响此行为的注册表更改是否正确?请帮助我了解是否还有其他可能影响行为的因素。

【问题讨论】:

您确定 WideCharToMultiByte 没有返回字节数组吗?如果是这种情况,那么它可能会以某种方式与二进制移位运算符(也是 ' 混淆 【参考方案1】:

默认情况下,WideCharToMultiByte 将接受一个 char 指针并返回转换后的多字节数组。

他还提到可以在除 XP 之外的所有操作系统上工作,其中语言注册表已更改。所以我不认为这个问题是因为二进制移位运算符。

【讨论】:

以上是关于宽字符到多字节问题的主要内容,如果未能解决你的问题,请参考以下文章

宽字符

宽字节注入

sqli-宽字节注入

宽字节注入%df的理解

宽字节注入

宽字节注入