Что произойдет, если я наполню базовый поток языковым стандартом с помощью фасета 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 2

1 ответ:

В C++0x, codecvt_utf*<> может быть создан только с широкими символами. Что произойдет, если вы используете char, Не указано, единственный способ узнать-попробовать.

Имейте в виду, что codecvt_utf16 преобразуется в/из внешнего представления UTF-16. То есть ваш файл должен быть закодирован в UTF-16. Вы можете рассмотреть возможность использования UTF-8 вместо этого.

В качестве дополнительной заметки, для меня остается загадкой, почему кто-то хочет что-то не Unicode в эти дни. Нравится ли людям использовать ограниченные наборы символов или что?