不使用Unicode符号的字符串变量使用的默认编码是什么?

问题描述

在不使用Unicode char*等任何符号的情况下创建字符串变量(u8)时,例如:

const char *str = "Hello 日本語 سلام Ä भारतीय ไทย";

如何指定认编码以在流行平台上读取该变量或取决于什么?

解决方法

在不使用Unicode符号的情况下,与字符串变量一起使用的默认编码是什么?

在这里要考虑两种编码。一种是源文件的编码。这是您用来写入文件的编码。为了使这种解释正确,编译器必须使用与编写文件时相同的编码来解释源。

另一种编码是执行编码。这是字符串和字符文字将具有的编码。通常与源编码相同,但是如果不相同,则文字将转换为执行编码。

两种编码都是实现定义的。

如何指定默认编码以在流行平台中读取该变量或取决于什么?

这取决于您使用的编译器。

例如,这就是海湾合作委员会的文件所说的:

-fexec-charset=charset

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

-finput-charset=charset

设置输入字符集,用于将输入文件的字符集转换为 海湾合作委员会。如果未指定语言环境,或者GCC无法获取此信息 来自区域设置的信息,默认为UTF-8。这可以是 由语言环境或此命令行选项覆盖。目前 如果发生冲突,则命令行选项优先。 charset可以是系统的“ iconv”库支持的任何编码 常规。