ustring - замена на месте std :: string / std :: wstring? - PullRequest
4 голосов
/ 06 декабря 2011

Продолжение на C ++ и UTF8 - Почему бы просто не заменить ASCII?

Почему нет std::ustring, который мог бы заменить std::string, std::wstring в новых приложениях?

Конечно, с соответствующей поддержкой в ​​стандартной библиотеке. Аналогично тому, как boost::filesystem3::path не заботится о строковом представлении и работает как с std::string, так и с std::wstring.

Ответы [ 2 ]

4 голосов
/ 06 декабря 2011

Зачем вам что-то менять?

string и wstring - это классы строк, соответствующие char и wchar_t, которые в контексте взаимодействия со средой предназначены для переноса данных, закодированных соответственно в "узкополосном представлении системы" "и фиксированной ширины в" кодировке системы ".

С другой стороны, u8 / u / U, а также char16_t и char32_t, а также соответствующие строковые классы предназначены для хранения последовательностей кодовых точек Unicode, закодированных в UTF-8/16 / 32.

Последний является отдельной проблемной областью от первого. Стандарт не содержит механизма для соединения двух доменов (и библиотека, такая как iconv(), обычно требуется для того, чтобы сделать этот мост переносимым, например, путем транскодирования WCHAR_T / UTF-32).

Вот мой стандартный список связанных вопросов: # 1 , # 2 , # 3

2 голосов
/ 06 декабря 2011

Там std::u16string и std::u32string.Стандартные библиотеки, в которых вы можете использовать их, например, для именования файлов, открываемых с помощью fstream, не будут изменены, чтобы использовать их, потому что они действительно не могут.Например, некоторые платформы принимают практически произвольную байтовую строку для именования открываемого файла без заданной кодировки.Необходимость выполнить это через строку с определенной кодировкой может привести к поломке и быть несовместимой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...