我发现C标准(C99和C11)对于字符/字符串代码的位置和编码规则比较模糊:
该标准首先定义了the source character set和the execution character set。本质上,它提供了一组符号,但不将任何数字值与其关联--,那么默认字符集是什么?
这里不是关于编码的问题,而是数字/代码点映射的字形/曲线图。它确实将universal character names定义为ISO/IEC 10646,但它是否说这是默认的字符集?
作为上面的扩展-我找不到任何能说明数字转义序列\0和\x所代表的字符的东西。
从C标准(C99和C11,我没有检查ANSI )中,我得到了关于字符和字符串文本的如下信息:
+---------+-----+------------+----------------------------------------------+
| Literal | Std | Type | Meaning |
+---------+-----+------------+----------------------------------------------+
| '...' | C99 | int | An integer character constant is a sequence |
| | | | of one or more multibyte characters |
| L'...' | C99 | wchar_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| u'...' | C11 | char16_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| U'...' | C11 | char32_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| "..." | C99 | char[] | A character string literal is a sequence of |
| | | | zero or more multibyte characters |
| L"..." | C99 | wchar_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
| u"..." | C11 | char16_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
| U"..." | C11 | char32_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
| u8"..." | C11 | char[] | A UTF-8 string literal is a sequence of zero |
| | | | or more multibyte characters |
+---------+-----+------------+----------------------------------------------+然而,却找不到关于这些文字的编码规则的任何信息, UTF-8似乎暗示了UTF-8编码,但我认为在任何地方都没有明确提到。另外,对于其他类型,编码是未定义的还是实现依赖的?
我不太熟悉UNIX规范。规范是否为这些规则指定了任何附加约束?
另外,如果有人能告诉我 GCC和MSVC使用什么样的字符集/编码方案,这也会有所帮助。
发布于 2012-08-30 19:58:38
C不贪心字符集。没有所谓的“默认字符集”,而是定义了它的实现--尽管在大多数现代系统中,它主要是ASCII或UTF-8。
发布于 2012-08-31 02:29:20
该标准没有指定默认编码,因为现有的实践已经在具有许多不同编码的机器上实现了C,例如Honeywell大型机和IBM大型机。
我希望gcc从LC_CHARSET当前指定的地区获取它的缺省值,但我从未测试过它。
VC++从“控制面板”设置中获取其默认设置。默认控制面板设置根据购买国家Windows的不同而不同,大多数用户从不更改它,但是他们可以在安装Windows时更改它。
program的发明是为了使源程序可以从一个区域设置的环境复制到一个略有不同的区域设置的环境中,并且仍然可以被编译。例如,如果中国中的Windows用户使用program,那么希腊的Windows用户将能够编译相同的源程序。但是,如果地区差异太大,例如使用EBCDIC的区域和使用EUC的区域,则只使用三角图是不够的。
https://stackoverflow.com/questions/12204453
复制相似问题