2014-04-11 2 views
2
int main(){ 
//"Chào" in Vietnamese 
wchar_t utf16[] =L"\x00ff\x00fe\x0043\x0000\x0068\x0000\x00EO\x0000\x006F"; 
//Dump utf16: FF FE 43 0 68 0 E 4F 0 6F (right) 
int size = WideCharToMultiByte(CP_UTF8,0,utf16,-1,NULL,0,NULL,NULL); 
char *utf8 = new char[size]; 
int k = WideCharToMultiByte(CP_UTF8,0,utf16,-1,utf8 ,size,NULL,NULL); 
//Dump utf8: ffffffc3 fffffbf ffffc3 ffffbe 43 0 
} 

내 코드는 문자열을 UTF-8로 변환하면 잘못 표시되므로 코드가 잘못되었습니다.WideCharToMultiByte 문제가있는 UTF-16에서 UTF8까지

+0

처음에는 넓은 문자열이 아니더라도 전체 배열을 변환하려고합니다. 0을 포함하고 있습니다. – Deduplicator

+0

또한, unicode는 utf-16의 동의어가 아닙니다. – Deduplicator

+1

@Deduplicator 불행히도 Microsoft는 그렇지 않다고 생각합니다. –

답변

0
wchar_t utf16[] = L"\uFEFFChào"; 
int size = 5; 

for (int i = 0; i < size; ++i) { 
    std::printf("%X ", utf16[i]); 
} 

이 프로그램은 인쇄합니다 : FEFF 43 68 E0 6F

당신이 파일을 인쇄 출력에서 ​​읽은 각 wchar_t을 인쇄하는 경우 FF FE 43 0 68 0 E 4F 0 6F 다음 UTF-16 데이터는 파일에서 읽을되지 않는 제대로 .. 그 값 UTF-16 문자열을 나타냅니다 :`L "C \ 0h \ 0à \ 0o".

당신은 파일 읽기에 대한 코드를 보여 주지만, 여기 올바르게 수행하는 한 가지 방법입니다하지 않습니다 당신은 잘못 파일을 읽고

https://stackoverflow.com/a/10504278/365496

0

. 입력 내용을 덤프하면 1 바이트가 넓은 문자로 표시됩니다. 출력 결과는 L"\xff\xfe\x43"을 UTF-8로 인코딩 한 바이트 시퀀스입니다. 문자열이 입력에서 처음으로 \x0000에서 잘 렸습니다.