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

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

В основном я использую 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 в эти дни. Людям нравится использовать ограниченные наборы символов или что?

Другие вопросы по тегам