我在理解Windows C程序中控制台上打印的字符集时遇到了麻烦。我没有找到任何直接回答这个问题的问题(如果有一个链接将不胜感激)。
在查看一些不同的字符集时(UCS-2,ISO 8859 - 1,Unicode)我总是在字符"ü"后面找到字符"ý"。当我编写一个C程序在控制台上打印字符时,实际上字符"superscript 2"跟在"ü"后面。(对不起,不知道如何在这里写字符下标).在Visual Studio调试环境中,"ý"仍然显示为跟在"ü'后面.
因此,我的问题是:C在控制台上使用什么字符集?
1条答案
按热度按时间4xrmg8kj1#
当编码为utf-8时,这些字符是某些扩展iso-latin-1字符的iso-latin-1版本。这可能是由于两个原因:
\u0080
...\u002f
范围内的utf字符被打印为两个字符)并且你的终端不支持utf-8输出。因此,我的问题是:C在控制台上使用什么字符集?
要支持多字节字符,你需要在C语言中做几件事。我假设你除了使用C语言的普通函数外,没有做任何特殊的事情,这些函数通常假设你使用的是7位ASCII字符,并且语言环境设置为
C
(这根本不是语言环境):setlocale(3)
来初始化语言环境。wchar_t
的例程的wchar_t
版本(此类型支持超过256个字符的字符集,如Unicode)您需要自学,因为从那时起,例如
strlen()
将不再是计算字符串长度的例程(因为它只计算传递的字符串的字节数---它与char
相关,而与wchar_t
无关),所以您需要使用mblen(3)
(在函数原型中要非常小心,因为有些函数接受wchar_t *
字符串,而有些函数接受char *
字符串)。检查手册页中的例程,如:一米12纳米一x,一米13纳米一x,一米14纳米一x,一米15纳米一x,一米16纳米一x,一米17纳米一x,一米18纳米一x,一米19纳米一x,一米20纳米一x,...
我写了一个小版本的
cal(1)
命令,并国际化它,以支持外国语言环境和完整的国际支持(这包括使用宽字符)您可以得到它here查看完整的东西,使用一个程序,显示其输出的语言,您已经为您的会话配置.另请参见
locale(1)
命令的手册页,以检查您为帐户配置的语言环境。