1

我想直接在字符串文字中嵌入非 ASCII Unicode 字符并在printf中使用它们。这意味着我的源代码必须保存在 utf-8 或 utf-16 中。Visual Studio 2010 确实支持以任一格式编辑和保存 C++ 源文件。但是在编译和执行时,它不会产生正确的 unicode 字符。编译器是否支持嵌入了 unicode 字符的字符串文字?

例如

wprintf(L" chinese characters:中文字\n"); the trailing chinese characters cannot be displayed
4

3 回答 3

1

我没有中文版的 Windows 来测试,所以这完全是猜测。

控制台和文件输出函数知道文件不是以 UTF-16 编码的,因此它们会在输出之前尝试将字符转换为代码页。正如默认语言环境是“C”而不是基于您的系统设置的任何内容一样,默认代码页也可能是不合适的不包含中文字符的代码页。

有一个功能SetConsoleOutputCP可以更改控制台的代码页。目前尚不清楚此函数是否更改了实际控制台窗口使用的代码页,或者它是否仅影响程序内从 Unicode 进行的转换。

于 2011-06-17T03:29:57.263 回答
0

测试宽文字的简单方法是跳过 的格式化部分printf,并将您的字符串直接提供给操作系统:WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), L" chinese characters:中文字", ....

于 2011-06-16T09:41:44.330 回答
0

#pragma setlocale 可能是您需要的。

于 2011-06-16T20:06:48.667 回答