![](/img/trans.png)
[英]C language: there is a trailing character after the last character of my output
[英]output a unicode character in c language
我尝试用 C 语言输入 output an airplane unicode 字符,但控制台上什么也没有。
这是我的代码:
#include <stdio.h>
#include <locale.h>
int main() {
setlocale(LC_CTYPE, setlocale(LC_ALL, ""));
wprintf(L"🛧");
return 0;
}
忽略用于其他目的的额外标头。
我期望显示在控制台上,但没有出现。 我试过 output wprint 中的一些其他语言,例如日语和中文:这些都很好用。 但是许多其他字形,如其他形状的飞机和大多数箭头也不起作用。 只是没有打印任何东西。
第一个问题是打印正确的字符。 L"" 表示宽字符串。 是 16 位宽 (Windows) 还是 32 位宽 (Linux) 是实现定义的。 它是否是 Unicode 编码取决于语言环境。
您的编译器是否支持源代码中的 Unicode 个字符(AFAIK)仍然是实现定义的。
您的 output 介质(在您的情况下是控制台)是否支持宽字符/ Unicode 字符串取决于该 output 介质。
您为该 output 介质配置的字体是否支持您要打印的字符取决于字体。
如果你想专门使用Unicode ,你应该使用 char8_t[] (UTF-8) 或 char32_t[] (UTF-32)——如果你的 output 介质支持的话,char16_t/UTF-16 也存在——并指定字符使用 \u.... 或 \U....... 字符转义。 这处理了我回答的前两段。 接下来的两个可以解释为什么您仍然可能无法获得预期的结果。
尽管您缺少#include <wchar.h>
header,但您的程序仍按预期运行。
检查您的控制台是否支持 utf(通常这意味着能够接收 utf8 编码)如果没有,则不值得尝试在其上显示 unicode output,原因显而易见。
在 Linux 中,这需要您有一个语言环境(检查它在您的控制台中执行locale
),其中包括UTF-8
后缀以支持 utf(取决于您的操作系统/版本,您需要将其拼写为大写或小写,具体取决于语言环境已在您的平台中编译)
如果您使用的是 Windows,恐怕 windows 控制台没有 Unicode 支持(或者不久前就有),所以问题不在程序中(正如我所说,工作完美),但在 output 设备中。
您仍然可以尝试的事情:
locale -a
中列出的语言环境,然后运行程序以调整合适的语言环境:export LANG="es_ES.UTF-8"
(正如我所说,当您使用上面的命令列出所有语言环境时,该语言环境必须出现,并且它必须支持 unicode 编码)
在带有 Visual Studio 2022 的 windows 上,这对我有用:
#include <Windows.h>
#include <stdio.h>
int main()
{
SetConsoleOutputCP(CP_UTF8);
puts(u8"🛧😊");
}
请注意,文件需要使用 UTF-8 编码保存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.