gpt4 book ai didi

c++ - 文件编码如何影响 C++11 字符串文字?

转载 作者:可可西里 更新时间:2023-11-01 15:10:58 26 4
gpt4 key购买 nike

您可以在 C++11 中编写 UTF-8/16/32 字符串文字,方法是在字符串文字前加上 u8/u/U分别。编译器必须如何解释在这些新型字符串文字中包含非 ASCII 字符的 UTF-8 文件?我知道该标准没有指定文件编码,仅凭这一事实就会使源代码中非 ASCII 字符的解释行为完全未定义,从而使该功能的用处不大。

我知道您仍然可以使用 \uNNNN 对单个 unicode 字符进行转义,但是对于通常包含多个 unicode 字符的完整俄语或法语句子来说,这不是很可读。

我从各种来源了解到,u 应该等同于当前 Windows 实现中的 LU 例如Linux 实现。因此,考虑到这一点,我也想知道旧字符串文字修饰符所需的行为是什么......

对于代码示例猴子:

string utf8string a = u8"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
string utf16string b = u"L'hôtel de ville doit être là-bas. Ça c'est un fait!";
string utf32string c = U"L'hôtel de ville doit être là-bas. Ça c'est un fait!";

在理想情况下,所有这些字符串都产生相同的内容(如:转换后的字符),但我使用 C++ 的经验告诉我,这绝对是实现定义的,可能只有第一个会做我想做的.

最佳答案

在 GCC 中,使用 -finput-charset=charset:

Set the input character set, used for translation from the character set of the input file to the source character set used by GCC. If the locale does not specify, or GCC cannot get this information from the locale, the default is UTF-8. This can be overridden by either the locale or this command line option. Currently the command line option takes precedence if there's a conflict. charset can be any encoding supported by the system's "iconv" library routine.

同时检查选项 -fexec-charset-fwide-exec-charset

最后,关于字符串文字:

char     a[] = "Hello";
wchar_t b[] = L"Hello";
char16_t c[] = u"Hello";
char32_t d[] = U"Hello";

字符串文字的大小修饰符(LuU)仅仅决定了字符串的类型字面意思。

关于c++ - 文件编码如何影响 C++11 字符串文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6794590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com