Что произойдет, если я наполню базовый поток языковым стандартом с помощью фасета codecvt utf16?
Указано ли, что произойдет, если я наполню basic_stream<char>
locale с codecvt_utf16<char>
facet?
В основном, я использую typedef wchar_t tchar;
и typedef char tchar;
для изменения интерфейсов для (того, что я называю) Unicode и не-Unicode сборки моей библиотеки. Я хочу сделать исходный код проще, всегда наполняя мои файловые потоки языковым стандартом с codecvt_utf16<tchar>
аспектом. Сработает ли это вообще?
(я бы не возражал, если бы файл, читаемый такими проникнутыми fstream
, должен был бы содержать либо только ASCII, либо только кодовые точки, представимые в текущем глобальная локаль.)
Редактировать:
Учитывая, что codecvt_utf16<char>
кажется неопределенным поведением, как насчет наполнения basic_stream codecvt_utf16<wchar_t>
? Является ли это поведение определенным?
1 ответ:
В C++0x,
codecvt_utf*<>
может быть создан только с широкими символами. Что произойдет, если вы используетеchar
, Не указано, единственный способ узнать-попробовать.Имейте в виду, что codecvt_utf16 преобразуется в/из внешнего представления UTF-16. То есть ваш файл должен быть закодирован в UTF-16. Вы можете рассмотреть возможность использования UTF-8 вместо этого.
В качестве дополнительной заметки, для меня остается загадкой, почему кто-то хочет что-то не Unicode в эти дни. Нравится ли людям использовать ограниченные наборы символов или что?