我发现 C 标准(C99 和 C11)在字符/字符串代码位置和编码规则方面含糊不清:
首先,标准定义了源字符集
和执行字符集
。
本质上它提供了一组字形,但不关联任何数值
与他们 - 那么默认字符集是什么?
我在这里不是在问编码,而是在字形/轨道到数字/代码点映射。
它确实将 universal character names
定义为 ISO/IEC 10646,但它是否表示
这是默认字符集?
作为上述内容的扩展 - 我找不到任何说明什么字符的内容 数字转义序列\0 和\x 代表。
根据 C 标准(C99 和 C11,我没有检查 ANSI C)我得到了以下内容 关于字符和字符串文字:
+---------+-----+------------+----------------------------------------------+
| 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 规范。 UNIX 规范是否对这些规则指定了任何附加约束?
此外,如果有人能告诉我GCC 和 MSVC 使用什么字符集/编码方案,那也会有所帮助。
最佳答案
C 对字符集不贪心。没有“默认字符集”这样的东西,它是实现定义的——尽管在大多数现代系统上它主要是 ASCII 或 UTF-8。
关于c++ - C 标准 : Character set and string encoding specification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25064205/