簡體   English   中英

C-在Linux終端中打印希臘字母

[英]C - printing greek letters in linux terminal

我有關於C語言的本文,要求在終端中打印一些希臘句子。 在提供給我們的代碼模板中,有以下代碼行:

system("chcp 1253>nul");

這應該打印希臘字符。 在我的Ubuntu終端中,我看到:

�������� ����� �� ����� ����� ��� �������� ���� ������

那么,如何在終端中打印希臘字符?

在大多數Linux中都是開箱即用的。 唯一要做的就是使用

 setlocale(LC_ALL, "");

在程序的開始。 這依賴於以下事實:UTF-8是用戶語言環境的默認編碼選擇。 標准說此調用切換到用戶的當前區域設置。 默認值為使用“ C”語言環境,該語言環境可能支持也可能不支持國家字符。

默認情況下,gcc將源代碼解釋為以UTF-8編碼。 存在編譯時選項可以更改此設置,但是建議將所有內容保留在Linux的UTF-8中。 來自Windows的源可能未使用UTF-8編碼,需要重新編碼。 為此,請使用iconv實用程序; l。 如果源與特定的舊版代碼頁相關聯,請嘗試使用該代碼頁名稱作為源編碼。

輸入或輸出非ASCII文本的AC程序(符合ISO C99或更高版本,或POSIX.1或更高版本)應使用寬字符串,寬I / O和本地化。

例如:

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

int main(void)
{

    /* Tell the C library to use the current locale settings. */
    setlocale(LC_ALL, "");

    /* Standard output is used with the wide I/O functions. */
    fwide(stdout, 1);

    /* Print some Greek text. */
    wprintf(L"Γειά σου Κόσμε!\n");

    return EXIT_SUCCESS;
}

需要注意的是寬字符串文字使用書面L"..."字符串字面量,而正常(ASCII或縮小)為"..." 同樣,寬字符常量(類型wint_t )用L前綴編寫; 例如L'€'


編譯時,您確實需要告訴編譯器源代碼使用什么字符集。 在Linux中,GCC使用語言環境設置,但是還提供了-finput-charset=windows-1252選項,以將其更改為Windows Western European。

建議您編寫一個Bash幫助程序腳本,例如to-utf8 ,而不要弄亂這些標志:

#!/bin/bash

if [ $# -lt 2 ] || [ ":$1" = ":-h" ] || [ ":$1" = ":--help" ]; then
    printf '\n'
    printf 'Usage: %s [ -h | --help ]\n' "$0"
    printf '       %s windows-1252 file.c [ ... ]\n' "$0"
    printf '\n'
    exit 0
fi

charset="$1"
shift 1

Work=$(mktemp) || exit 1
trap "rm -f '$Work'" EXIT

for src in "$@" ; do
    iconv -f "$charset//TRANSLIT" -t UTF-8 "$src" > "$Work" || exit $?
    sed -e 's|\r$||' "$Work" > "$src" || exit $?
    printf '%s: Converted successfully.\n' "$src"
done

exit 0

如果需要,您可以使用

sudo install -o 0 -g 0 -m 0755 to-utf8 /usr/bin/

第一個命令行參數是源字符集(使用iconv --list查看所有字符),后跟要修復的文件列表。

該腳本將創建一個自動刪除的臨時文件。 iconv行將每個文件的字符集轉換為UTF-8,將結果保存到臨時文件中。 sed文件將任何CRLF( \\r\\n )換行符更改為LF( \\n ),從而覆蓋文件的內容。

(而不是使用第二個臨時文件來保存內容,而是通過sed將其輸出定向到原始文件,這意味着原始文件將其所有者和組保持完整。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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