tin*_*ast 12 c c++ char character-encoding string-literals
我发现C标准(C99和C11)在字符/字符串代码位置和编码规则方面含糊不清:
首先,标准定义the source character set和the execution character set.本质上它提供了一组字形,但不会将任何数值与它们相关联 - 那么什么是默认字符集?
我不是在这里询问编码,而只是字形/曲目到数字/代码点映射.它确实定义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 |
| u8"..." | C11 | char[] | A UTF-8 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 |
+---------+-----+------------+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
但是我找不到关于这些文字的编码规则的任何信息. UTF-8似乎确实暗示了UTF-8编码,但我不认为它在任何地方都有明确提及.另外,对于其他类型,编码是undefined还是依赖于实现?
我不熟悉UNIX规范.UNIX规范是否指定了这些规则的任何其他约束?
此外,如果有人能告诉我GCC和MSVC使用的charset /编码方案也会有所帮助.
小智 5
C对字符集并不贪心.没有"默认字符集"这样的东西,它的实现被定义 - 尽管在大多数现代系统中它主要是ASCII或UTF-8.