Мне нужно изменить мою программу, чтобы она принимала Unicode, который может поступать из любой из кодировок UTF-8 и различных кодировок UTF-16 и UTF-32. Я мало что знаю о Unicode (хотя я читал статья и Страница Википедии Джоэла Спольски).
Прямо сейчас я использую std::istream и читаю свой входной char с помощью char, а затем сохраняю (при необходимости) в std::string. Я бы хотел
Кроме того, если возможно, я хотел бы максимально сэкономить место (поэтому, если нам не нужно больше байта / символа, мы его не используем). Насколько я понимаю, это означает сохранение в UTF-8, что нормально, но я не знаю стандартной строки, которая делает это (насколько я понимаю, wchar_t имеет размер и кодировку, определяемые реализацией).





UTF-8 экономит место, если вы в основном используете стандартные символы ASCII.
std :: string не имеет проблем с UTF-8, поскольку в нем нет 0 байтов. Вы можете указать std :: string, какова длина входных символов, если они имеют нулевые байты, как в UTF-32. std :: string не сможет сказать вам, сколько символов в вашей строке UTF-8, вам придется использовать внешнюю функцию.
Кроме того, существует широкая версия std :: string с использованием wchar_t, в отличие от char, я просто забыл имя.
Также есть фасеты в boost для преобразования между кодировками.
Вы можете использовать стандартную библиотеку с ускорением. Или вы можете использовать функции обработки строк из библиотеки C. Существуют также функции, предоставляемые средами программирования, такими как Qt и Tcl.
См. Например:
Спасибо! Он не появился после быстрого поиска в Интернете, и у меня не было доступа к моей стандартной библиотечной ссылке.
Взгляните на вопрос Переход с std :: string на std :: wstring для встроенных приложений?
As Pukku said: You might get some headache because of the fact that the C++ standard dictates that wide-streams are required to convert double-byte characters to single-byte when writing to a file, and how this conversion is done is implementation-dependent.
Расширенная версия std :: string - std :: wstring