在我的系统上,一个非常普通的 Ubuntu 13.10,尽管 LC_ 环境变量设置为 en_US.UTF-8,但我使用的任何工具始终可以正确处理法语重音字符“éèàçù...”。特别是像 grep, cat, ... 这样的命令行实用程序总是可以顺利读取和打印这些字符。
尽管有这些评论,但像这样的小程序
int main() {
printf("%c", getchar());
return 0;
}
当用户输入“é”时失败。
从手册页和大量谷歌搜索来看,没有标准的方法可以关闭标准输出,然后重新打开它。从 man fwide() 开始,如果 stdout 处于字节模式,我不能将它传递给宽字符模式,除非关闭它并重新打开它......因此我不能使用 getwchar() 和 wprintf()。
我不敢相信像 cat、grep 等每一个实用程序都重新实现了一种管理宽字符的方法,但根据我的研究,我看不到其他方法。
是我的系统有问题吗?我看不出每个实用程序如何完美运行。请问我错过了什么?