Как кодирование файлов влияет на C ++ 11 строковых литералов?

Вы можете написать строковые литералы 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 ++ научил меня, что это определенно определенная реализация и, вероятно, только первый будет делать то, что я хочу.

12
задан Xeo 19 December 2011 в 01:55
поделиться