2012-06-05 3 views
0

유니 코드 변환을 UNICODE MFC 대화 상자 응용 프로그램에서 테스트했습니다. 여기서 편집 상자에 중국어를 입력 할 수 있습니다. "E0 65 2D 4E 1 층 75 09 67"cstring m_pszdata가 유니 코드의 변환 된 char *와 일치하지 않습니다.

DDX_Text (PDX, IDC_EDIT1, m_strUnicode) UpdateDate (TRUE)

m_pszdatam_strUnicode의 쇼를 사용하여 문자 읽은 후. 그런 다음 다음 코드를 사용하여 char *로 변환합니다.

char * psText; psText = 새 문자 [dwMinSize]; WideCharToMultiByte (CP_OEMCP, NULL, m_strUnicode, -1, psText, dwMinSize, NULL, FALSE);

psText

는 m_strUnicode의 m_pszdata와 마찬가지로 "CE 드 D6 D0 C9 FA D3 D0", 전혀 포함하지 않는다. 왜 그런지 설명해 주시겠습니까?

답변

0

ce de d6 d0 c9 fa d3 d0은 GBK 단위로 无中生有입니다. 당신은 유니 코드를 조작하고 있습니까?


CP_OEMCP instructs the API to use the currently set default OEM codepage. 

그래서 여기 내 생각 엔 당신이 기본 코드 페이지로 GBK와 중국의 PC에있어 것입니다.

无中生有 (UTF16LE의 경우)은 e0 65 2d 4e 1f 75 09 67이므로 기본적으로 UTF-16-LE 문자열을 GBK로 변환합니다.

+0

프로젝트를 시작할 때 MFC 프로젝트 설정에서 유니 코드를 선택했고 중국어 문자가 유니 코드 형식이라고 가정하고 테스트를 위해 无 中生 有를 입력했습니다. 나는 이것에 대해 틀렸는가? – LSSG

+0

알았어. 감사. abcdef라는 영문자를 사용하여 다시 테스트했으며 예상대로 작동했습니다. UNICODE가 사용되면 UTF-16-LE로 입력되고, 멀티 바이트로 변환 한 후에는 기본 코드 페이지 문자열에 입력되는 문자열이 무엇이든간에 말할 수 있습니까? – LSSG

관련 문제