Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11:普通字符串文字和UTF-8字符串文字之间的差异示例?_C++_Utf 8_Character Encoding_C++11_String Literals - Fatal编程技术网

C++ C++;11:普通字符串文字和UTF-8字符串文字之间的差异示例?

C++ C++;11:普通字符串文字和UTF-8字符串文字之间的差异示例?,c++,utf-8,character-encoding,c++11,string-literals,C++,Utf 8,Character Encoding,C++11,String Literals,不以编码前缀开头的字符串文字是普通字符串 并用给定的字符初始化 以u8开头的字符串文字(如u8“asdf”)是UTF-8字符串文字,并使用UTF-8中编码的给定字符进行初始化 我不理解普通字符串文字和UTF-8字符串文字之间的区别 有人能提供一个他们不同的情况的例子吗?(导致不同的编译器输出) (我的意思是从标准的角度来看,而不是任何特定的实施) 字符文字或字符串文字中的每个源字符集成员,以及每个转义 字符文字或非原始字符串文字中的序列和通用字符名转换为 执行字符集的相应成员 P. C语言和C

不以编码前缀开头的字符串文字是普通字符串 并用给定的字符初始化

以u8开头的字符串文字(如u8“asdf”)是UTF-8字符串文字,并使用UTF-8中编码的给定字符进行初始化

我不理解普通字符串文字和UTF-8字符串文字之间的区别

有人能提供一个他们不同的情况的例子吗?(导致不同的编译器输出)

(我的意思是从标准的角度来看,而不是任何特定的实施)

字符文字或字符串文字中的每个源字符集成员,以及每个转义 字符文字或非原始字符串文字中的序列和通用字符名转换为 执行字符集的相应成员


<> P. C语言和C++语言在它们的实现中允许大量的纬度。早在UTF-8成为“以单字节编码文本的方式”之前,C就已经编写好了:不同的系统有不同的文本编码

<>所以C和C++中的字符串值是由编译器决定的。代码>'A'是编译器为字符
A
选择的任何编码,这可能与UTF-8不一致

C++增加了编译器必须支持真正的UTF-8字符串文本的要求。“代码”> U8“A”(0)< /C>的位值是通过C++标准通过UTF-8标准来固定的,而不管编译器所针对的平台的首选编码。

现在,大多数C++平台都使用2的补码整数,大多数编译器都有与UTF-8兼容的字符编码。因此,对于像

“hello world”
这样的字符串,
u8“hello world”
几乎肯定是相同的

例如,从
mangcc

-fexec字符集=字符集

设置执行字符集,用于字符串和字符常量。默认值为UTF-8。字符集可以是系统iconv库例程支持的任何编码

-finput字符集=字符集

设置输入字符集,用于将输入文件的字符集转换为GCC使用的源字符集。如果区域设置未指定,或者GCC无法从区域设置获取此信息,则默认为UTF-8。这可以由区域设置或此命令行选项覆盖。当前,如果存在冲突,则命令行选项优先。字符集可以是系统iconv库例程支持的任何编码


是一个能够更改C/C++的执行和输入字符集的示例。

普通字符串文字是编译器最喜欢的任何编码;UTF-8字符串文字是用UTF-8编码的(这是标准规定的)。@MatteoItalia:“编译器最喜欢”是什么意思?当你说它是“编码在X中”时,你是指在源文件中还是在可执行文件中?在程序中。标准不知道可执行文件。不知道。执行字符集是“编译器最喜欢的编码”。它不必是UTF-8。示例:
std::cout@Mechanicalsnail:您可以使用编译器的选项覆盖gcc中的执行(和源)字符集,但默认值为UTF-8。因此,为了澄清这一点,u8前缀会影响在翻译阶段5中将字符串文本生成为字符数组时使用的执行字符集。u8前缀对翻译阶段1中用于读取字符串文字的输入字符集没有影响。@user1131467我相信是的,在啤酒打赌级别。因为输入字符集理论上可能意味着输入字符集感知编辑器显示为
的是
+
的utf-8代码,编译器将其读取为
。也就是说,源文件中的字节仅在编译器的输入字符集上下文中才有意义。编写一个看似合法的C/C++程序将是一个有趣的模糊编程,它实际上做了一些完全不同的事情,因为用于编译它的输入字符集。