我有这篇关于C语言的论文,它需要在终端上打印一些希腊句子。 在给我们的代码模板中有这行代码:
�������� ����� �� ����� ����� ��� �������� ���� ������
这应该打印希腊字符。 在我的Ubuntu终端中,我看到:
{{1}}
那么,如何在终端中打印希腊字符?
答案 0 :(得分:2)
在大多数Linux中,这都是开箱即用的。唯一必须做的就是使用
setlocale(LC_ALL, "");
在程序的开头。这依赖于以下事实:UTF-8是用户的默认编码选择'语言环境。该标准表示此呼叫切换到用户的当前区域设置。默认是使用" C"可能支持或不支持国家字符的语言环境。
默认情况下,gcc将源代码解释为以UTF-8编码。编译时选项可以改变它,但建议在Linux上保留UTF-8中的所有内容。来自Windows的源可能不是用UTF-8编码的,需要重新编码。使用iconv
实用程序; l。如果源与特定的遗留代码页相关联,请尝试将该代码页名称作为源编码。
答案 1 :(得分:1)
输入或输出非ASCII文本的C程序(符合ISO C99或更高版本,或POSIX.1或更高版本)应使用宽字符串,宽I / O和本地化。
例如:
L"..."
请注意,使用"..."
编写宽字符串文字,而使用wint_t
编写普通(ASCII或窄)字符串文字。类似地,宽字符常量(类型L
)用L'€'
前缀写入;例如,-finput-charset=windows-1252
。
编译时,您需要告诉编译器源代码使用的字符集。在Linux中,GCC使用区域设置,但也提供了一个选项to-utf8
,例如将其更改为Windows Western European。
我建议你写一个Bash助手脚本,而不是摆弄旗帜,比如#!/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
查看全部),然后是要修复的文件列表。
该脚本会创建一个自动删除的临时文件。 sed
行将每个文件的字符集转换为UTF-8,将结果保存到临时文件中。 \r\n
文件将任何CRLF(\n
)换行符更改为LF(sed
),覆盖文件内容。
(而不是使用第二个临时文件来保存内容,让<%= image_tag image_article.picture.url, class: 'img-fluid' if image_article.picture? %>
将其输出定向到原始文件,意味着原始文件保持其所有者和组完整。)