免责声明:对于下面的所有文字(针对一个简单的问题),我深表歉意,但我真诚地认为每一点信息都与问题相关。我很乐意学习其他方式。我只能希望,如果成功,问题和答案可以帮助其他人在 Unicode 疯狂。开始。
我已经阅读了所有通常备受推崇的关于 utf8 的网站,尤其是这个非常适合我的目的,但我也阅读了经典,就像 SO 中其他类似问题中提到的那些。但是,我仍然缺乏如何将其全部集成到我的虚拟实验室中的知识。我使用 Emacs
;; Internationalization
(prefer-coding-system 'utf-8)
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
在我的 .emacs 中,xterm 以
LC_CTYPE=en_US.UTF-8 xterm -geometry 91x58\
-fn '-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO10646-1'
我的语言环境如下:
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
我的问题如下(一些答案可能是应用程序的预期行为,但我仍然需要理解它,所以请耐心等待):
假设以下 C 程序:
#include <stdio.h>
int main(void) {
int c;
while((c=getc(stdin))!=EOF) {
if(c!='\n') {
printf("Character: %c, Integer: %d\n", c, c);
}
}
return 0;
}
如果我在我的 xterm 中运行它,我会得到:
€
Character: � Integer: 226
Character: �, Integer: 130
Character: �, Integer: 172
(以防万一我得到的字符是黑色圆圈内的白色问号)。整数是编码 € 所需的 3 个字节的十进制表示,但我不确定为什么 xterm 不能正确显示它们。
相反,鼠标垫,例如,打印
Character: â, Integer: 226
Character: ,, Integer: 130 (a comma, standing forU+0082 <control>, why?!)
Character: ¬, Integer: 172
同时,Emacs 显示
Character: \342, Integer: 226
Character: \202, Integer: 130
Character: \254, Integer: 172
问题:我能问的最普遍的问题是:如何让所有内容都打印相同的字符?但我确信会有后续行动。
再次感谢,并为所有文字道歉。