2012-03-15 2 views
7

다른 인코딩을 이해하려고 할 때 몇 가지 질문이 있습니다.C/C++ 인코딩 질문

문자열의 기본 인코딩은 무엇입니까?

char ascii[]= "Some text"; // This is plain ASCII right? 
wchar_t utf[] = L"Some Text"; // Is this UTF-16? Or ASCII stored in wchar_t's? 
MessageBoxW(NULL, L"Hello", L"HI", MB_OK); // What encodings are the 2 strings in? 

그런 다음 어떻게 UTF-8 문자열을 만들 수 있습니까? MessageBox에 UTF-8 문자를 표시하려면?

내 질문은 주로 Windows에서 이루어 지지만, 다른 운영 체제에서는 다른 경우 나는 알고 싶어합니다.

답변

9

표준은 좁은 문자열이나 넓은 문자열의 인코딩을 지정하지 않습니다. 벤더는 일반적으로 대상 머신에서 당연한 일은 아니지만 그 이상의 것을 말하기는 어렵습니다. 예를 들어 좁은 문자열은 대부분의 개인용 컴퓨터에서는 ASCII (또는 실제로는 ISO-8859와 같은 것)를 사용하지만 IBM 메인 프레임에서는 EBCDIC을 사용합니다.

와이드 문자 문자열도 다양합니다. 예를 들어 Windows의 대부분의 컴파일러는 UTF-16을 사용합니다. Linux에서는 UTF-32/UCS-4가 더 일반적입니다.

MessageBox에 대한 언급은 일반적으로 와이드 문자열에 대해 UTF-16을 사용하는 Windows를 제안합니다. 이 경우 와이드 문자열을 명시 적으로 지정하면 함수의 넓은 버전 - MessageBoxW을 명시 적으로 지정하려는 경우도 있습니다.

UTF-8 문자열 리터럴을 만들면 "행운을 빌어 요"라고 말할 수 있습니다. Visual Studio를 사용하면 그렇게 할 수 있습니다. 그러나 그렇게 할 수있는 방법이 있다면, 나는 그것을 알지 못합니다.

+2

C++ x11은 UTF-8 문자열 리터럴에 'u8'접두사를 추가합니다 (예 :'u8 "Hello World"). 그러나 C++ 컴파일러 공급 업체가 C++ x11을 채택하기 전까지는 UTF 대신 -8 문자열을 사용하십시오. 예를 들어, 코드 페이지 65001로 "WideCharToMultiByte()"를 사용하거나 UTF-8 8 진수 값을 포함하는'char []'리터럴을 사용하여 컴파일 타임에 런타임시. –