Вы можете написать строковые литералы UTF-8/16/32 в C ++ 11, добавив к строковому литералу префикс u8
/ u
/ U
соответственно. Как компилятор должен интерпретировать файл UTF-8, который содержит символы, отличные от ASCII, внутри этих новых типов строковых литералов? Я понимаю, что в стандарте не указаны кодировки файлов, и один только этот факт сделает интерпретацию не-ASCII-символов внутри исходного кода полностью неопределенным поведением, делая эту функцию чуть менее полезной.
Я понимаю, что вы все еще можете избежать одиночного юникода символы с \ uNNNN
, но это не очень хорошо читается, скажем, для полного русского или французского предложения, которое обычно содержит более одного символа Юникода.
Насколько я понимаю из разных источников, 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!";
В идеальном мире все эти строки производят одинаковые content (как в: символы после преобразования), но мой опыт работы с C ++ научил меня, что это определенно определенная реализация и, вероятно, только первый будет делать то, что я хочу.