gpt4 book ai didi

c - 如何在 Windows 上用 C 编写 unicode hello world

转载 作者:可可西里 更新时间:2023-11-01 13:26:26 37 4
gpt4 key购买 nike

我很想让它工作:


#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.exeHello World!┬ú∞C:\dev\unicodevs\unicodevs\Debug>

我想这是意料之中的,因为终端没有渲染这些字体的字体。但让我明白的是,即使我尝试这样做:

C:\dev\unicodevs\unicodevs\Debug>cmd /u /c "unicodevs.exe > output.txt"

生成的文件(即使它是 UTF-8 编码的)看起来像:

Hello World!壓

源文件本身被定义为 unicode(以没有 BOM 的 UTF-8 编码)。构建时的编译器输出:

1>------ Rebuild All started: Project: unicodevs, Configuration: Debug Win32 ------1>Deleting intermediate and output files for project 'unicodevs', configuration 'Debug|Win32'1>Compiling...1>main.c1>.\main.c(1) : warning C4005: 'UNICODE' : macro redefinition1>        command-line arguments :  see previous definition of 'UNICODE'1>.\main.c(2) : warning C4005: '_UNICODE' : macro redefinition1>        command-line arguments :  see previous definition of '_UNICODE'1>Note: including file: C:\Program Files\Microsoft Visual Studio 9.0\VC\include\wchar.h1>Note: including file:  C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtdefs.h1>Note: including file:   C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sal.h1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sal.h(108) : warning C4001: nonstandard extension 'single line comment' was used1>Note: including file:   C:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h1>Note: including file:   C:\Program Files\Microsoft Visual Studio 9.0\VC\include\vadefs.h1>Note: including file:  C:\Program Files\Microsoft Visual Studio 9.0\VC\include\swprintf.inl1>Note: including file:  C:\Program Files\Microsoft Visual Studio 9.0\VC\include\wtime.inl1>Linking...1>Embedding manifest...1>Creating browse information file...1>Microsoft Browse Information Maintenance Utility Version 9.00.307291>Copyright (C) Microsoft Corporation. All rights reserved.1>Build log was saved at "file://c:\dev\unicodevs\unicodevs\unicodevs\Debug\BuildLog.htm"1>unicodevs - 0 error(s), 3 warning(s)========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

关于我做错了什么的任何想法?ST 上的类似问题(例如:unicode hello world for C?)似乎指的是 *nix 构建 - 据我所知,setlocale() 不适用于 Windows。

我也尝试使用 code::blocks/mingw gcc 构建它,但得到了相同的结果。

最佳答案

问题不是写入 (wprintf),而是导致问题的输出的 cmd 重定向。您可以尝试通过直接写入文件来进行测试。在这种情况下,如果您只是写几个单词,您可能会遇到记事本(或者更确切地说是 Windows API 函数)没有正确猜测和错误地将您的文本解释为 ASCII 的情况。在这种情况下,您还需要先将 BOM 字符写入文件。

#include <stdio.h>
#include <wchar.h>

int main()
{
FILE *out;
char bom[] = "\xFF\xFE";
wchar_t s[] = L"中文!";
size_t c;

out = fopen ("out.txt", "w");
if(out == NULL)
{
perror("out.txt");
return 1;
}

c = fwrite(bom, 1, 2, out);
if(c != 2)
{
perror ("Fatal write error.");
fclose(out);
return 2;
}

c = fwrite(s, sizeof(wchar_t), wcslen(s), out);
if(c != wcslen(s))
{
perror ("Fatal write error.");
fclose(out);
return 2;
}

fclose(out);

return 0;
}

关于c - 如何在 Windows 上用 C 编写 unicode hello world,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2543346/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com