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