Статья N2238 относится к 2007 году и не имеет отношения к делу. Я не уверен, о чем конкретно говорит Страуструп в интервью, но это не последние новости.
N3242 §22.5 по-прежнему требуется codecvt_utf8
и codecvt_utf16
, которые все, что вам нужно для файлового ввода-вывода Unicode. imbue
правильный фасет на wcout
, и все должно быть хорошо ... если у вас есть совместимая библиотека. Однако на практике GCC и MSVC уже поставляют UTF-8, и я ожидаю, что каждая серьезная платформа C ++ сохраняет паритет между mbstowcs
и codecvt
.
Там может быть путаница, потому что N3242 § 22.5 / 5 говорит
- Многобайтовые последовательности могут быть записаны только в виде двоичного файла. Попытка записи в текстовый файл
производит неопределенное поведение.
Это связано с тем, что ввод / вывод в текстовом режиме преобразует окончания строк, поэтому байт 0x10
как половина 16-битного слова UTF-16 можно преобразовать в 0x13, 0x10
, что приведет к повреждению потока. Это не имеет ничего общего с плохой поддержкой ... просто обязательно откройте файл в двоичном режиме, как и в случае с любой библиотекой, предоставляющей такие функции.