2014-10-31 44 views
0

在我的一个项目中,我需要在Windows C++中支持UTF-8。宽字符到多字节问题

当前代码使用的是wcstombs,其中中文语言没有正确转换。我用WideCharToMultiByte替换wcstombs。经过测试,在Windows 7和Windows XP SP3中,我可以正常工作。

但是在旧机器之一中安装了Windows XP SP3中的中文或CZech语言包。我了解这也会影响注册表。那里的应用程序行为有所不同。

当我用wcstombs做opertator重载的时候<<它的工作正常。当我使用WideCharToMultiByte时,它的效果与预期不符。

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

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

+0

你确定WideCharToMultiByte没有返回一个字节数组吗?如果是这种情况,那么它可能以某种方式与二进制移位运算符混淆(也是'<<') – MiltoxBeyond 2014-10-31 07:08:35

回答

0

默认情况下,WideCharToMultiByte将接受一个字符指针并返回convered多字节数组。

此外,他还提到,除了XP之外的所有操作系统,其中语言注册表已更改。所以我不认为这个问题是因为二进制shif操作符。