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