2012-06-14 3 views
20

QString은 std :: string보다 어떤 이점이 있습니까? 수 정상 std :: string 유니 코드 문자를 저장할 수 있습니까? 다양한 곡 파일을 열 프로그램을 작성하려고합니다. 이 파일의 이름은 다른 언어로 표시 될 수 있습니다. 이 경우 정상적인 문자열을 사용하면 제대로 작동하지 않는다고 들었습니다. 애플리케이션을 QT와 독립적으로 유지하고 안드로이드 등의 코드를 재사용하고 싶습니다. 너는 무엇을 제안 하느냐.QString over std :: string

+4

이 – Arafangion

+0

이 당신의 부분에 대답하는 데 도움이 될 수 있습니다 http://www.joelonsoftware.com/articles/Unicode.html 질문 http://stackoverflow.com/questions/6028093/unicode-stdstring-class-replacement – kenny

+0

@Arafangion : 재미의 반 ... 파일 시스템 인코딩에 대한 모든 혼란을 그림에 추가해야합니다. – 6502

답변

23

QString을 사용하면 유니 코드로 작업 할 수 있고, 더 유용한 방법을 사용할 수 있으며 Qt와 잘 통합됩니다. cbamber85noted과 같이 더 나은 성능을 제공합니다.

std::string은 인코딩 할 때 바이트를 저장하기 때문에 인코딩에 대해 아무것도 모릅니다. 그것은 문자 당 1 바이트를 사용하지만, 세계의 모든 언어에는 충분하지 않습니다. 텍스트를 저장하는 가장 좋은 방법은 문자가 다른 바이트 수를 차지할 수있는 UTF-8 인코딩이며 std::string은 제대로 처리 할 수 ​​없습니다. 예를 들어, length 메서드는 문자가 아닌 바이트 수를 반환합니다. 그리고 이것은 내가 QString에 익숙하지 않다 빙산의 일각 ...

+0

QT 물건을 피하려고하는데 다른 방법이 있습니까? –

+0

공정하게하려면 std :: string을 사용하면 유니 코드를 사용할 수 있지만 데이터가 특정 인코딩에 있음을 의미하지는 않습니다. QString이 유니 코드 변환을 허용한다는 것을 의미합니까? – Arafangion

+10

Vihaan, Qt를 피하려고하는 이유는 무엇입니까? Qt 컴포넌트와 인터페이스를해야한다면 QString을 사용하면 훨씬 쉬워진다. – Joey

6

이지만, std::string 의 가장 큰 장점은 표준 것입니다. 유니 코드와 관련하여 std::string에 UTF-8을 저장하는 데 문제가 없습니다. 그러나 무엇을하고 있느냐에 따라 std::wstring (일반적으로 은 UTF-16 또는 UTF-32를 저장)을 사용하는 것이 좋습니다.

유니 코드의 복잡한 조작의 경우 ICU를 제안합니다. 그러나 응용 프로그램이 많으면 UTF-8 만 저장하면 충분합니다.

+0

'QString'은 합리적인 중간 단계입니다. 완전한 ICU 기능을 제공하지는 않지만 UTF-8/16/32로 변환하는 것과 같은 간단한 작업을 수행 할 수 있습니다. – MSalters

+0

+1 표준 준수는 항상 장점입니다. 프레임 워크의 spesific 유형을 프레임 워크의 용도로 저장하십시오. 난 그냥 궁금 해서요, 어떤 장점을 UTF - 16 또는 UTF - 32 문자열을 유니 코드 대 std :: string 줄 줄까요? – daramarak

+0

@daramarak 그것은 코드에서 문자열로 무엇을하는지에 따라 다릅니다. 'std :: string'은 포함 된 _bytes_의 일부를 대체하기위한 몇 가지 추가 함수가있는 단순한 컨테이너 이상은 아닙니다. 문자 또는 인코딩에 대한 지식이 없으며 텍스트와 관련된 내용은 훨씬 적습니다. 텍스트를 조작하는 경우 텍스트를 나타내는 클래스가 더 적절할 수 있습니다. 또는,'std :: string'을 UTF-8 텍스트로 취급하는 라이브러리. –

4

기술적으로 모든 유형의 문자 (std::basic_string)를 저장하는 표준 문자열 클래스가 있습니다. std::stringstd::wstringcharwchar의 경우 std::basic_string의 전문화 일뿐입니다. 또한 std::u16stringstd::u32string은 UTF-16 및 UTF-32 저장 장치를위한 것입니다.

어쨌든 Qt로 작업해야한다면 전체 Qt 프레임 워크가 함께 작동하도록 설계되어 있기 때문에 QString은 항상 표준 라이브러리 문자열보다 더 나은 대안 일 수 있습니다.

7

Qt 프레임 워크를 사용하여 소프트웨어를 작성하는 경우 QString을 사용하는 것이 더 좋습니다. 간단한 이유는 문자열에서 작동하는 거의 모든 Qt 함수가 QString을 허용한다는 것입니다. std :: string을 사용하면 하나에서 다른 것으로 typecase해야 할 상황에서 끝날 수도 있습니다. 당신의 소프트웨어가 Qt를 전혀 사용하지 않는다면 std :: string을 사용하는 것을 고려해야합니다. 이렇게하면 코드를 더 이식성있게 만들 수 있으며 사용자가 소프트웨어를 사용하기 위해 설치해야하는 추가 프레임 워크에 의존하지 않게됩니다.

+3

프레임 워크를 사용하면 프레임 워크 라이브러리가 코드 전체에 스며 들게해서는 안됩니다. UI 경계에서 변환하는 것은 공급 업체가 잠기는 것을 방지하기 위해 지불 할 작은 가격입니다. – daramarak

+3

@daramarak 맞습니다. 그렇지만 Qt는 단순한 UI 프레임 워크가 아닙니다. 그것은 네트워킹, SQL, XML, 스크립팅 등과 같은 모든 비 UI 요소를 제공합니다. 따라서 프레임 워크를 얼마나 광범위하게 사용하는지에 따라 하나는 호출 할 수 있습니다. – Pankaj

관련 문제