2016-10-12 1 views
0

\u 인코딩 된 시퀀스와 함께 문자열 리터럴을 사용하여 QString::fromUtf8으로 전달했습니다 (QString::fromUtf8("Precio (\u20AC/k)");과 같음).하지만 내 마음을 조금 고민하고 cppreference를 읽는 중입니다. 및 다른 출처, 나는 이진으로 번역 된 \u20AC 시퀀스가 ​​어떻게되는지 명확하지 않습니다.QString :: fromUtf8 (str) 및 u 인코딩 된 문자 시퀀스

다른 말로하면, \u20AC 시퀀스 대신 QString::fromUtf8 수신이란 무엇입니까? 20AC 코드 포인트의 UTF-8 표현은 무엇입니까? 그것의 UTF-16 표현? 또는 무엇을?

내가 읽은 대부분의 소스는 UTF-16 표현으로 변환되었다고합니다. 즉, 해당 문자열을 fromUtf8으로 전달할 때 잘못했음을 의미합니다. 그러나 항상 정상적으로 작동합니다.

내가 옳은 일을하고 있는지 아닌지 알고 싶습니까?

답변

1

접두사가없는 문자열 리터럴 "..."의 인코딩은 구현에 따라 정의됩니다. 대부분의 비 Windows 컴파일러에서는 때때로 변경 될 수 있지만 UTF-8로 기본 설정됩니다. GCC의 경우이 스위치는 -fexec-charset (docs)입니다.

는 실행 문자 세트의 스트링의 문자 독립적 UTF-8 인코딩을 얻으려면 C++ 11 도입 u8"..." ( cppreference)

+0

심지어 어떤 유니 코드 이스케이프 시퀀스가 ​​없으면? 그래서 순수 ASCII 아스키 프리픽스 리터럴 문자열''hello ''는 UTF-16으로 인코딩 될 수 있습니까? –

+1

@ Peregring-lk no, UTF-16은 실행 문자 세트의 멀티 바이트 인코딩으로 허용되지 않습니다. 그것은 wchar_t가 16 비트 인 이상한 컴파일러 (Visual Studio)가'L "의 인코딩으로 사용할 수도 있습니다. hello"' – Cubbi

+0

그래, 접두사가없는 문자열 리터럴의 인코딩은 내용에 따라 달라질 수 있습니다. 안 그래? 문자열에 실행 문자 집합 만 있으면 ASCII 인코딩 (= UTF-8, = ISO-8859-1 등)하지만 다른 문자가 포함되어 있으면 이러한 특정 문자열의 인코딩은 구현에 따라 정의됩니다. 그렇지 않니? –