我正在编写一个 Excel 插件,需要wchar_t
为 Excel 生成输出(尽管在内部,我们是 100% char
,实际上仅限char
于纯 ASCII)。在某一时刻,我正在使用
swprintf
进行转换:
static wchar_t buffer[ 32369 ];
buffer[0] = swprintf( buffer + 1, sizeof(buffer) - 1, L"#%s!", message );
Excel 显示某种 CJK 字符,尽管message
(type char const*
) 是一个以空字符结尾的字符串,在可打印的 ASCII 之外没有字符(十六进制值 0x20-0x7E)。
我在一个小型测试程序中尝试过这个,以十六进制转储生成的字符串,看起来 VC++ 将message
其视为一个wchar_t const*
(尽管它似乎识别'\0'
正确,尽管它在一个字节上);这导致wchar_t
像0x6568
(而不是0x0068, 0x0065
我期望的)这样的值。
根据 C99 标准,对于"%s"
说明符,
swprintf
应将字符从char const*
“好像通过重复调用mbrtowc
函数 [...]”转换。我看到的行为是 Visual C++ 库中的错误,还是我必须更改全局语言环境中的某些内容?
(FWIW:当我用 g++ 编译和运行我的小测试程序时,我得到了我期望的行为。但是,G++ 不是我们的 Excel 插件的选项,至少目前不是。)