如何使用wcstombs而不是WideCharToMultiByte ?
How to use wcstombs instead of WideCharToMultiByte ?
wcstombs
有三个参数。
WideCharToMultiByte
有八个参数,
如何更换?
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)
一样吗?
WideCharToMultiByte
做一些与wcstombs
有很大不同的事情,所以这种替换是否会成功至少有点值得怀疑¹。
具体来说,WCTMB 从 UTF-16 转换为您选择的另一个字符集(和编码)。 wcstombs
从"宽字符串"转换为"多字节字符串",但标准将这些术语的确切定义留给实现者。
换句话说:WCTMB 从已知编码转换为另一种已知编码。 wcstombs
从未知编码转换为另一种未知编码。您不能用后者替换前者,特别是如果您想转换为中文编码(这不是 936 吗?
寻求进行此替换的原因是什么?无论它是什么,几乎可以肯定有更合适的方法来实现目标。
更新:如果您想要一个独立于平台的可靠解决方案,那么我建议您使用 ICU。不要指望找到WCTMB的单行替代品,因为它根本不存在。
¹ 极度轻描淡写
wcstombs
转换为的结果编码取决于当前区域设置,而WideCharToMultiByte
可以显式为其指定代码页。-
wcstombs
从"宽字符串"转换,其编码取决于标准库的实现。WideCharToMultiByte
从 UTF-16 格式的字符串转换。宽字符wcstombs
依赖的字符可能不以 UTF-16 编码,但在 Windows 中宽字符为 UTF-16。 -
wcstombs
是便携式的,WideCharToMultiByte
不是。如果您的目标平台只是Windows,那么这并不重要。 -
WideCharToMultiByte
允许指定一个"默认字符",该字符将被使用,而不是无法在目标编码中表示的字符。
因此,WideCharToMultiByte
功能强大得多,可能用作wcstombs
的后端。
如果您当前的代码页不是 936,那么您询问的替换是不可能的。
相关文章:
- 没有找到相关文章