C-在Linux终端打印希腊字母



我在C语言上有本文,该论文需要在终端中打印一些希腊句子。在给我们的代码模板中,有这类代码:

system("chcp 1253>nul");

这应该打印希腊字符。在我的Ubuntu终端中,我看到了:

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

那么,如何在终端中打印希腊字符?

这在大多数Linuxes中都受支持。唯一要做的就是使用

 setlocale(LC_ALL, "");

在程序的开头。这取决于UTF-8是用户网站编码的默认选择。该标准说此通话切换到用户的当前语言环境。默认值是使用可能支持或可能不支持民族角色的" C"语言环境。

默认情况下,GCC解释了UTF-8中编码的源代码。存在编译时选项可以更改它,但是建议将所有内容保留在Linux上的UTF-8中。来自Windows的来源可能未在UTF-8中编码,需要重新编码。使用iconv实用程序;如果源与特定的遗留代码页面关联,请尝试该代码页名称作为源编码。

a c程序(与ISO C99或更高版本或更高版本或更高版本的ISO C99或更高版本(,输入或输出非ASCII文本应使用宽字符串,宽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 Elecor。

我建议您写一个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(rn(Newlines更改为LF(n(,覆盖文件的内容。

(而不是使用第二个临时文件保存内容,将sed引导到原始文件,而是指原始文件使其所有者和组完整。(

最新更新