簡體   English   中英

output c 語言中的一個 unicode 字符

[英]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 編碼)

  • 確保您的控制台支持您正在使用的語言環境。
  • 將程序的 output 重定向到一個文件,並使用二進制編輯器/查看器編輯該文件,以顯示程序的實際字節 output。 這將允許您檢查程序是否有效打印任何內容,或者問題是 output 終端沒有顯示小平面(這也可能是問題所在)不僅可以說畫一個平面,接收器必須知道如何繪制它。
  • 仔細檢查您的區域設置是否包含指定使用 unicode 字符的區域設置(無論您的系統支持什么編碼)即使您在美國,您也需要一個包含 Unicode 支持的區域設置,以支持非 ASCII 字符。

在帶有 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM