c++ - C 标准 : Character set and string encoding specification

标签 c++ c character-encoding char string-literals

我发现 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/

相关文章:

c++ - 打印引用类的指针地址

c++ - boost:uuid 到 char * 没有 std::string

c++ - 用固定数字池中的随机唯一整数填充 vector

PHP、MySQL 和 XML = 乱码 HTML 输出

character-encoding - 非 unicode 与 ASCII 是一回事吗?

c++ - 在 C++ 中将具有 unique_ptr 的对象插入 vector

c - C-Socket 管道损坏。如何只保持服务器运行?

c - 如何将临时值分配给二维数组

c - Linux 没有实现 POSIX 信号队列?

php - 创建数据库时使用什么字符集