Здравствуйте, eugene hermann, Вы писали:
EH>корректно ли для сабжа использовать std::wstring::assign()?
EH>т.е. что-то типа: wstr.assign(str.begin(), str.end());
Здравствуйте, eugene hermann, Вы писали:
EH>Вот и я так думал. Но почему-то оно работает, причем в обе стороны. Непонятно.
"Лифт не работает? — Работает, но плохо"
Поэлементное копирование — каждому char'у сопоставляет wchar_t.
Такое соответствие есть у кодировки Windows Western (1252).
Но и то, поскольку char знаковый, то при приведении к wchar_t он расширяется до signed int, а потом обрезается до разрядности wchar_t.
Поэтому корректно работает преобразование только ASCII (символы с кодами 0-127).
В обратную сторону — из wchar в char — все символы за пределами cp1251, естественно, преобразуются фиг знает во что.
А если ты используешь wstring только как контейнер, не показывая его содержимого людям (или показывая через приведение обратно в string), то это не показатель корректной работы.
С таким же успехом можно было вместо wstring использовать vector<double>.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: конвертирование string в wstring
От:
Аноним
Дата:
28.04.08 18:41
Оценка:
К>С таким же успехом можно было вместо wstring использовать vector<double>.
можно и basic_string<double>
Здравствуйте, eugene hermann, Вы писали:
К>>Тогда зачем wstring?
EH>Всё просто. В таком виде принимаю данные, а дальше их надо будет скормить либе в API которой только char*. И наоборот.
Возможно, что этот API предполагает строку в какой-то заданной кодировке.
На выбор:
— текущая локаль
— UTF-8
— ASCII (ты ориентируешься на этот случай)