QString은 std :: string보다 어떤 이점이 있습니까? 수 정상 std :: string 유니 코드 문자를 저장할 수 있습니까? 다양한 곡 파일을 열 프로그램을 작성하려고합니다. 이 파일의 이름은 다른 언어로 표시 될 수 있습니다. 이 경우 정상적인 문자열을 사용하면 제대로 작동하지 않는다고 들었습니다. 애플리케이션을 QT와 독립적으로 유지하고 안드로이드 등의 코드를 재사용하고 싶습니다. 너는 무엇을 제안 하느냐.QString over std :: string
답변
QString
을 사용하면 유니 코드로 작업 할 수 있고, 더 유용한 방법을 사용할 수 있으며 Qt와 잘 통합됩니다. cbamber85noted과 같이 더 나은 성능을 제공합니다.
std::string
은 인코딩 할 때 바이트를 저장하기 때문에 인코딩에 대해 아무것도 모릅니다. 그것은 문자 당 1 바이트를 사용하지만, 세계의 모든 언어에는 충분하지 않습니다. 텍스트를 저장하는 가장 좋은 방법은 문자가 다른 바이트 수를 차지할 수있는 UTF-8 인코딩이며 std::string
은 제대로 처리 할 수 없습니다. 예를 들어, length
메서드는 문자가 아닌 바이트 수를 반환합니다. 그리고 이것은 내가 QString
에 익숙하지 않다 빙산의 일각 ...
QT 물건을 피하려고하는데 다른 방법이 있습니까? –
공정하게하려면 std :: string을 사용하면 유니 코드를 사용할 수 있지만 데이터가 특정 인코딩에 있음을 의미하지는 않습니다. QString이 유니 코드 변환을 허용한다는 것을 의미합니까? – Arafangion
Vihaan, Qt를 피하려고하는 이유는 무엇입니까? Qt 컴포넌트와 인터페이스를해야한다면 QString을 사용하면 훨씬 쉬워진다. – Joey
이지만, std::string
의 가장 큰 장점은 이 표준 것입니다. 유니 코드와 관련하여 std::string
에 UTF-8을 저장하는 데 문제가 없습니다. 그러나 무엇을하고 있느냐에 따라 std::wstring
(일반적으로 은 UTF-16 또는 UTF-32를 저장)을 사용하는 것이 좋습니다.
유니 코드의 복잡한 조작의 경우 ICU를 제안합니다. 그러나 응용 프로그램이 많으면 UTF-8 만 저장하면 충분합니다.
'QString'은 합리적인 중간 단계입니다. 완전한 ICU 기능을 제공하지는 않지만 UTF-8/16/32로 변환하는 것과 같은 간단한 작업을 수행 할 수 있습니다. – MSalters
+1 표준 준수는 항상 장점입니다. 프레임 워크의 spesific 유형을 프레임 워크의 용도로 저장하십시오. 난 그냥 궁금 해서요, 어떤 장점을 UTF - 16 또는 UTF - 32 문자열을 유니 코드 대 std :: string 줄 줄까요? – daramarak
@daramarak 그것은 코드에서 문자열로 무엇을하는지에 따라 다릅니다. 'std :: string'은 포함 된 _bytes_의 일부를 대체하기위한 몇 가지 추가 함수가있는 단순한 컨테이너 이상은 아닙니다. 문자 또는 인코딩에 대한 지식이 없으며 텍스트와 관련된 내용은 훨씬 적습니다. 텍스트를 조작하는 경우 텍스트를 나타내는 클래스가 더 적절할 수 있습니다. 또는,'std :: string'을 UTF-8 텍스트로 취급하는 라이브러리. –
기술적으로 모든 유형의 문자 (std::basic_string
)를 저장하는 표준 문자열 클래스가 있습니다. std::string
및 std::wstring
은 char
및 wchar
의 경우 std::basic_string
의 전문화 일뿐입니다. 또한 std::u16string
및 std::u32string
은 UTF-16 및 UTF-32 저장 장치를위한 것입니다.
어쨌든 Qt로 작업해야한다면 전체 Qt 프레임 워크가 함께 작동하도록 설계되어 있기 때문에 QString
은 항상 표준 라이브러리 문자열보다 더 나은 대안 일 수 있습니다.
Qt 프레임 워크를 사용하여 소프트웨어를 작성하는 경우 QString을 사용하는 것이 더 좋습니다. 간단한 이유는 문자열에서 작동하는 거의 모든 Qt 함수가 QString을 허용한다는 것입니다. std :: string을 사용하면 하나에서 다른 것으로 typecase해야 할 상황에서 끝날 수도 있습니다. 당신의 소프트웨어가 Qt를 전혀 사용하지 않는다면 std :: string을 사용하는 것을 고려해야합니다. 이렇게하면 코드를 더 이식성있게 만들 수 있으며 사용자가 소프트웨어를 사용하기 위해 설치해야하는 추가 프레임 워크에 의존하지 않게됩니다.
- 1. QString std :: string 변환하는 방법?
- 2. C++ std :: string and string
- 3. QString :: 문자열
- 4. std :: string s = (std :: string) "a"+ "b"+ "c"; 승인?
- 5. std :: string :: assign (std :: string const &) 세그먼트 화 오류
- 6. 왜 std :: string :: max_size() == std :: string :: allocator :: max_size()
- 7. std :: string 이름과 std :: string 및 이름 사이의 C++ 차이점
- 8. std :: string :: find() 문제
- 9. Qt 및 std :: string
- 10. std :: string optimization?
- 11. std :: string 대 문자열
- 12. ctypes python std :: string
- 13. std :: string + = operator
- 14. std :: string 및 stdarg.h
- 15. std :: ostringsteam 및 std :: string 오류가 발생했습니다.
- 16. ustring - std :: string/std :: wstring의 대체 위치?
- 17. std :: vector <std::string> 충돌
- 18. QString
- 19. std :: sort on std :: vector <std::string>
- 20. std :: string 생성자가 포인터를 손상시킵니다.
- 21. Error from std :: string 참조
- 22. std :: string == 연산자가 작동하지 않습니다.
- 23. #define Glib :: string std : wstring
- 24. 부스트 :: 배열 복사 std :: string
- 25. std :: string :: 표준 구현 바꾸기?
- 26. std :: string 및 multiple concatenations
- 27. 숫자를 std :: string 또는 double로?
- 28. 무손실로 std :: string 및 QByteArray로 변환하는 올바른 방법
- 29. 부스트 오버로드 이상한 행동 .. int (int), int (std :: string)`int (int), int (std :: string), std :: string (std :: string)`과 어떻게 다릅니 까?
- 30. std :: string with Qt를 사용하면 파기시 런타임 오류가 발생합니다.
이 – Arafangion
이 당신의 부분에 대답하는 데 도움이 될 수 있습니다 http://www.joelonsoftware.com/articles/Unicode.html 질문 http://stackoverflow.com/questions/6028093/unicode-stdstring-class-replacement – kenny
@Arafangion : 재미의 반 ... 파일 시스템 인코딩에 대한 모든 혼란을 그림에 추가해야합니다. – 6502