![](/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.