Какие преимущества предлагает QString для std :: string? Может ли обычная std :: string хранить символы Unicode? Я пытаюсь написать программу, которая откроет различные файлы песен. Имя этих файлов может быть на разных языках. Я слышал, что использование обычной строки в таких случаях будет работать неправильно. Я хочу сохранить приложение независимо от QT и повторно использовать код, например, в android. Что ты предлагаешь .преимущество QString над std :: string
ответ
QString
позволяет работать с Unicode, имеет более полезные методы и интегрируется с Qt хорошо. Он также имеет лучшую производительность, так как cbamber85noted.
std::string
просто хранит байты, как вы их даете, он ничего не знает о кодировках. Он использует один байт на символ, но этого недостаточно для всех языков в мире. Лучший способ сохранить ваши тексты, вероятно, будет кодировкой UTF-8, в которой символы могут занимать различное количество байтов, а std::string
просто не могут справиться с этим правильно! Это, например, означает, что метод length
возвращает количество байтов, а не символов. И это только верхушка айсберга ...
Я смотрю, чтобы избежать материала QT, есть ли другой выход? –
Чтобы быть справедливым, std :: string также позволяет использовать unicode, хотя и предоставляется, это не значит, что данные находятся в определенной кодировке. Вы имеете в виду, что QString позволяет конвертировать в unicode? – Arafangion
Vihaan, если вы пытаетесь избежать Qt, зачем вы его используете? Если вам нужно взаимодействовать с компонентами Qt, то использование QString упрощает вашу жизнь. – Joey
Я не знаком с QString
, но большое преимущество std::string
является то, что она является стандартом. Что касается Unicode, то нет проблем хранения UTF-8 в std::string
; в зависимости от того, что вы делаете, Однако, возможно, лучше использовать std::wstring
(обычно будет хранить UTF-16 или UTF-32).
Для сложных манипуляций с Unicode я бы предложил ICU. Но для много приложений достаточно просто хранить UTF-8.
'QString' является разумным промежуточным звеном. Он не предлагает полную функциональность ICU, но он может делать простые вещи, такие как конверсии с/на UTF-8/16/32 – MSalters
+1 Придерживание стандарта всегда является преимуществом. Сохраните типы spesific для использования структуры. Мне просто интересно, какие преимущества дает строка UTF-16 или UTF-32 в случае unicode и std :: string? – daramarak
@daramarak Это зависит от того, что вы делаете со строками в коде. 'std :: string' действительно не намного больше, чем простой контейнер, с несколькими дополнительными функциями для замены некоторых из содержащихся _bytes_. Он не знает символов или кодировок, а тем более ничего, что связано с текстом. Если вы манипулируете текстом, может быть, что класс, представляющий текст, будет более уместным. Или, альтернативно, библиотека, которая обрабатывает 'std :: string' как текст UTF-8. –
Технически существует стандартный класс строк для хранения символов любого типа: std::basic_string
. std::string
и std::wstring
- это не что иное, как специализация std::basic_string
для char
и wchar
. Существуют также специализации std::u16string
и std::u32string
, предназначенные для хранения UTF-16 и UTF-32.
В любом случае, если вам нужно работать с Qt, QString
, вероятно, всегда будет лучшей альтернативой любой стандартной библиотечной строке, поскольку вся инфраструктура Qt предназначена для работы с ней.
Если вы используете фреймворк Qt для написания своего программного обеспечения, вам лучше использовать QString. Простая причина в том, что почти все функции Qt, которые работают с строками, будут принимать QString. Если вы используете std :: string, вы можете оказаться в ситуациях, когда вам придется иметь typecase от одного к другому. Вы должны рассмотреть возможность использования std :: string, если ваше программное обеспечение вообще не использует Qt. Это сделает ваш код более переносимым и не зависит от дополнительной структуры, которую пользователи должны будут установить для использования вашего программного обеспечения.
Использование фреймворка не должно быть основанием для того, чтобы позволить библиотеке фреймворка пронизывать весь код. Преобразование на границе ui - небольшая цена для оплаты, чтобы предотвратить блокировку вендора. – daramarak
@ daramarak Вы правы, но тогда Qt - это не просто интерфейс. Он предоставляет все виды неинтерфейса, такие как Networking, SQL, XML, Scripting и т. Д. Поэтому, в зависимости от того, насколько широко используется инфраструктура, можно позвонить. – Pankaj
- 1. Преобразование QString в std :: string
- 2. Преобразование std :: string в QString
- 3. Преимущество std :: wstring над CComBSTR
- 4. Wrapper для преобразования std :: string в QString?
- 5. Является ли std :: string ниже QString?
- 6. Как преобразовать QString в std :: string?
- 7. QString :: toStdString() сбой на std :: string destructor
- 8. std :: string с различным кодированием в QString
- 9. QString к StD :: строка
- 10. Система :: String to QString
- 11. std :: ostream to QString?
- 12. Преобразование QString в StD :: строка *
- 13. Сохранять символы non-ascii между std :: string и QString
- 14. Как преобразовать std :: string в QString в Qt?
- 15. эффективно сравнивать QString и std :: string для равенства
- 16. Показать текст внутри QGraphicsPolygonItem без копирования std :: string в QString?
- 17. Как передать `std :: string` в` QString`` метод arg`?
- 18. Преимущество `make_unique` над простым конструктором?
- 19. Преимущество ComboBox1 над переключателем?
- 20. Преимущество $ PATH над псевдонимом
- 21. Преимущество XmlTextReader над XmlReader
- 22. Преимущество перечислителей над коллекциями
- 23. Преимущество org.springframework.jdbc.datasource.DriverManagerDataSource над oracle.jdbc.pool.OracleDataSource
- 24. Преимущество дуги над ракеткой
- 25. Преимущество * это * над event.target
- 26. Преимущество IControllerActivator над DefaultControllerFactory.CreateController
- 27. Преимущество SessionStorage над Cookie
- 28. std :: string :: assign vs std :: string :: operator =
- 29. Отсутствует std :: string функциональность
- 30. Использование std :: string в QML
http://www.joelonsoftware.com/articles/Unicode.html – Arafangion
Это может помочь ответить на часть вас вопрос http://stackoverflow.com/questions/6028093/unicode-stdstring-class-replacement – kenny
@Arafangion : это половина удовольствия ... вы также должны добавить все беспорядок о кодировании файловой системы на картинку – 6502