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