wcstombs
有三个参数。
WideCharToMultiByte
有8个参数。
如何更换?
如何使用wcstombs
这样写:
int kk = WideCharToMultiByte(936, 0, szBn, ccBn+1, 0, 0, 0, 0);
如何使用wcstombs
这样写:
int kk= WideCharToMultiByte(936,
0,
szBn,
ccBn+1,
kkburr,
(ccBn+1)*sizeof(wchar_t),
0,
0)
是否相同?
答案 0 :(得分:3)
WideCharToMultiByte
做的事情与wcstombs
差别很大,所以至少有些怀疑¹这种替代会成功。
具体来说,WCTMB将UTF-16转换为您选择的另一个字符集(和编码)。 wcstombs
从“宽字符串”转换为“多字节字符串”,但标准将这些术语的确切定义留给实现者。
换句话说:WCTMB从已知编码转换为另一种已知编码。 wcstombs
将未知编码转换为另一种未知编码。你不能用后者替换前者,特别是如果你想转换成中文编码(不是936的那个?)。
寻求替换的原因是什么?无论它是什么,几乎可以肯定有更合适的方法来实现目标。
更新:如果您想要一个独立于平台的可靠解决方案,那么我建议ICU。不要指望找到WCTMB的单行替代品,因为它根本就不存在。
¹大规模低调
答案 1 :(得分:0)
wcstombs
转换为的结果编码取决于当前的区域设置,而WideCharToMultiByte
可以明确指定代码页。wcstombs
转换为“宽字符串”,其编码取决于标准库的实现。 WideCharToMultiByte
转换为UTF-16中的字符串。宽字符wcstombs
依赖可能不是以UTF-16编码,但在Windows宽字符中是UTF-16。wcstombs
是可移植的,WideCharToMultiByte
不可移植。如果您的目标平台仅适用于Windows,则无关紧要。WideCharToMultiByte
允许指定一个“默认字符”,用于代替无法在目标编码中表示的字符。因此WideCharToMultiByte
功能更强大,可能会用作wcstombs
的后端。
如果您当前的代码页不是936,那么您询问的替代品是不可能的。