这里的东西(https://docs.microsoft.com/en-us/cpp/build/reference/source-charset-set-source-character-set),我知道所有关于VC ++/source-charset和/execution-charset。
所以有 3 件事我需要保持不变(如果有任何错误,请纠正我):
所以,如果有我保存源文件encodingA,设置/source-charset和/execution-charset作为encodingA,并有代码wchar_t c = L'é';或char16_t c = u'é'; 或者char32_t c = U'é',
程序会é根据encodingA我在“解释”期间选择的代码单元来更改代码单元吗?
或者é无论我选择什么编码,代码单元都不会改变?
(不要关心控制台输出)
/source-charset规定了 Unicode 如何以字节形式存储在磁盘上的源文件中,仅此而已。代码编辑器知道é是 Unicode 代码点 U+00E9 并将其相应地编码到文件中(0xE9以 Latin-1、0xC3 0xA9UTF-8 等)。
当编译器随后读取源文件时,它使用指定的 将文件的字节转换为 Unicode /source-charset,然后根据需要处理 Unicode 数据。在此阶段,如果使用正确/source-encoding的文件字节被正确解码,则将é其作为 Unicode 代码点 U+00E9 读回,并且在下一步之前不会以任何特定编码进行处理。
在/execution-charset什么编码Unicode数据使然的可执行文件保存为,如果在代码中没有指定其他编码。因为它不在示例适用L/ u/U前缀指示的编码方式(L= UTF-16或UTF-32,这取决于平台,u= UTF-16,U= UTF-32)。所以:
wchar_t wc = L'é'; // 0xE9 0x00 or 0xE9 0x00 0x00 0x00
char16_t c16 = u'é'; // 0xE9 0x00
char32_t c32 = U'é'; // 0xE9 0x00 0x00 0x00
Run Code Online (Sandbox Code Playgroud)
您是否使用char,然后/execution-charset将适用:
char c = 'é'; // MAYBE 0xE9 or other single-byte value, or a multi-byte overflow warning/error
const char *s = "é"; // MAYBE 0xE9 or other single-byte value, or maybe 0xC3 0xA9
Run Code Online (Sandbox Code Playgroud)
除非您使用u8UTF-8 前缀:
char c = u8'é'; // illegal!
const char *s8 = u8"é", // 0xC3 0xA9
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |