Не удалось понять семантику u8-литералов или, вернее, понять результат на g++ 4.8.1
Это мое ожидание:
const std::string utf8 = u8"åäö"; // or some other extended ASCII characters
assert( utf8.size() > 3);
Это результат на g++ 4.8.1
const std::string utf8 = u8"åäö"; // or some other extended ASCII characters
assert( utf8.size() == 3);
- Исходным файлом является ISO-8859 (-1)
- Мы используем эти директивы компилятора: -m64 -std = С++ 11 -pthread -O3 -fpic
В моем мире, независимо от кодировки исходного файла, результирующая строка utf8 должна быть длиннее 3.
Или, я полностью неправильно понял семантику u8 и прецедента? Пожалуйста, просветите меня.
Обновление
Если я явно расскажу компилятору о том, что кодирует исходный файл, как и многие из предложенных, я получил ожидаемое поведение для букв u8. Но, регулярные литералы также кодируются в utf8
То есть:
const std::string utf8 = u8"åäö"; // or some other extended ASCII characters
assert( utf8.size() > 3);
assert( utf8 == "åäö");
- директива компилятора: g++ -m64 -std = С++ 11 -pthread -O3 -finput-charset = ISO8859-1
- Пробовал несколько других charset, определенных из iconv, например: ISO_8859-1 и т.д.
Я еще больше смущен, чем раньше...