2011-01-08 1 views
0

나는 UTF-8로 저장된 파일을 가지고 있고, 나는 이런 식으로 읽고 있어요 :는 UTF-8 유니 코드 바이트의 배열을 변환

ReadFile(hFile, pContents, pFile->nFileSize, &dwRead, NULL); 

(pContents 크기 nFileSize의 바이트 *입니다)

100 바이트 정도의 작은 파일에는 wchar_t * 형식으로 메모리에 읽으려는 텍스트가 들어 있으므로 유니 코드 텍스트로 편집 및 정적 컨트롤 텍스트를 설정할 수 있습니다.

어떻게 바이트를 UTF-8로 변환 할 수 있습니까?

편집에 UTF-8로 변환하는

+2

UTF-8 인코딩 된 텍스트를 읽는 경우 바이트 *는 이미 * UTF-8입니다. C++이나 C는 인코딩을 신경 쓰지 않고 그냥 바이트 배열을 보게됩니다. 너 정확히 뭘 하려구? – Oystein

+0

UTF-8은 문자를 완성하기 위해 때로는 2 바이트가 필요하고, 바이트 배열로 읽는 것만으로 광산이 필요합니다. – Kaije

+0

UTF-8은 문자 당 1에서 4 바이트 사이를 사용합니다. 그러나 바이트 배열로 취급하는 경우에는 관련이 없습니다. – dan04

답변

1
int res2 = WideCharToMultiByte(CP_UTF8, 0, tempBuf.c_str(), -1, 
           multiByteBuf, lengthOfInputString, NULL, NULL); 
int res = MultiByteToWideChar(CP_UTF8, 0, buf, -1, wcharBuf, lengthOfInputString); 
3

파일이 UTF-8이며 배열로 읽어합니다.
그렇다면 여전히 UTF-8 형식이므로 아무 것도하지 않아도됩니다.

+0

단어의 기술적 인 의미에서 올바르지 만 하향 회선을 사용할 자격이없는 반면, 뺨의 대답은 혀가 아닌 것입니다. 그렇습니다. 바이트는 여전히 UTF-8 문자열을 나타내지 만 그와 같이 조작 할 수는 없습니다. "얼마나 많은 문자가 있습니까?"라는 질문을 할 수 없습니다. "마지막 문자 제거"에 대한 질문이 훨씬 적습니다 .. – v010dya

+0

@Volodya : 뺨의 혀와 정답 만 제공했습니다. 그녀의 두 가지 대답이 잘못되었습니다.그들은 UTF-8 배열을 UTF-16 배열로 변환 할 때 (OP가 UTF-8 배열을 요청했습니다 (질문 참조). –

+0

이 질문과 관련이없는 가변 너비 문자 형식에 대한 사용자의 의견에 약점이 있음을 지적했습니다. 위의 변환 함수와 마찬가지로 MBC 문자열의 문자열 길이를 찾는 동일한 함수가 있습니다. 또한 UTF-16에 대한 문자열 길이를 직접 찾을 수 없습니다 (멀티 바이트 문자 형식이기 때문에 ([surrogate pairs] (http://en.wikipedia.org/wiki)를 알아야합니다./UTF-16)은 서로 다르게 계산됩니다. –