Что произойдет, если я добавлю basic_stream <char>в локаль с фасетом codecvt_utf16 <char>? - PullRequest
2 голосов
/ 22 августа 2011

Указано, что произойдет, если я добавлю basic_stream<char> с языком codecvt_utf16<char> фасет?

По сути, я использую typedef wchar_t tchar; и typedef char tchar; для изменения интерфейсов для (как я называю) сборок Unicode и не-Unicode моей библиотеки. Я хочу упростить исходный код, всегда наполняя свои файловые потоки локалью с codecvt_utf16<tchar> фасетом. Будет ли это работать вообще?

(Я не возражал бы, если бы файл, прочитанный таким проникновением fstream, содержал бы либо только ASCII, либо только кодовые точки, представимые в текущей глобальной локали.)

EDIT:

Учитывая, что codecvt_utf16<char> кажется неуказанным поведением, как насчет наполнения basic_stream codecvt_utf16<wchar_t>? Указано ли это поведение?

1 Ответ

1 голос
/ 22 августа 2011

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

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

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

...