您可以在 C++11 中编写 UTF-8/16/32 字符串文字,方法是分别在字符串文字前面加上u8
/ u
/ U
。编译器必须如何解释在这些新类型的字符串文字中包含非 ASCII 字符的 UTF-8 文件?我知道该标准没有指定文件编码,仅这一事实就会使源代码中的非 ASCII 字符的解释完全未定义的行为,从而使该功能变得不那么有用。
我知道您仍然可以使用 转义单个 unicode 字符\uNNNN
,但是对于通常包含多个 unicode 字符的完整俄语或法语句子来说,这不是很可读。
我从各种来源了解到的是,这u
应该等同L
于当前的 Windows 实现和U
例如 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++ 的经验告诉我,这绝对是实现定义的,可能只有第一个会做我想要的。