我正在尝试让这个工作起来:
#define UNICODE
#define _UNICODE
#include <wchar.h>
int main()
{
wprintf(L"Hello World!\n");
wprintf(L"£안, 蠀, ☃!\n");
return 0;
}
使用Visual Studio 2008 Express(在Windows XP上,如果有关系的话)。 当我从命令提示符(启动为cmd /u,应该能够启用Unicode?)运行时,我得到了以下结果:
C:\dev\unicodevs\unicodevs\Debug>unicodevs.exe Hello World! ┬ú∞ C:\dev\unicodevs\unicodevs\Debug>
我认为这是可以预料的,因为终端没有字体来渲染它们。 但令我疑惑的是,即使我尝试这样做:
C:\dev\unicodevs\unicodevs\Debug>cmd /u /c "unicodevs.exe > output.txt"
生成的文件(即使它是UTF-8编码的)看起来像:
Hello World! 壓
源文件本身被定义为Unicode(以UTF-8无BOM编码)。 编译器在构建时输出:
1>------ 重新生成全部开始: 项目: unicodevs,配置: Debug Win32 ------ 1>正在删除项目 'unicodevs' 的中间文件和输出文件,配置为 'Debug | Win32' 1>编译... 1>main.c 1>.\main.c(1) : 警告 C4005: 'UNICODE' : 宏重新定义 1> 命令行参数: 请查看“UNICODE”的先前定义 1>.\main.c(2) : 警告 C4005: '_UNICODE' : 宏重新定义 1> 命令行参数: 请查看“_UNICODE”的先前定义 1>注: 包括文件: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\wchar.h 1>注: 包括文件: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtdefs.h 1>注: 包括文件: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sal.h 1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sal.h(108) : 警告 C4001: 使用了非标准扩展名“单行注释” 1>注: 包括文件: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h 1>注: 包括文件: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vadefs.h 1>注: 包括文件: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\swprintf.inl 1>注: 包括文件: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\wtime.inl 1>链接... 1>嵌入程序集清单... 1>正在创建浏览信息文件... 1>Microsoft 浏览信息维护工具版本 9.00.30729 1>版权所有 (C) Microsoft Corporation。保留所有权利。 1>生成日志已保存在“file://c:\dev\unicodevs\unicodevs\unicodevs\Debug\BuildLog.htm” 1>unicodevs - 0 个错误,3 个警告 ========== 重新生成全部: 成功 1 个,失败 0 个,跳过 0 个 ==========
你有什么想法吗?类似的问题在ST上(比如这个:unicode hello world for C?)似乎是关于*nix builds的,据我所知,setlocale()在Windows上不可用。
我还尝试使用code::blocks/mingw gcc构建这个项目,但得到了相同的结果。