2009-06-29 7 views
3

그래서 SetThreadLocale을 사용하여 스레드 코드 페이지를 UTF8로 설정하려고합니다. 지금까지 "CT2A (szBUF, CP_UTF8)"와 같은 atl 문자열 변환 매크로의 두 번째 매개 변수를 사용하여이 작업을 수행했습니다. 하지만 SetThreadLocale()을 사용하여 처음에는 스레드 코드 페이지를 한 번 설정하고 변환 매크로의 두 번째 매개 변수를 다시 사용할 필요가 없습니다.SetThreadLocale 및 UTF8

어떻게하면됩니까? SetThreadLocale은 CP_UTF8과 같은 코드 페이지 매개 변수를 사용하지 않고 LCID 만 사용합니다. SetThreadLocale 어떤 매개 변수를 먹여야합니까?

염두에두고 특별한 언어가 없습니다. 내가 얻는 문자열은 일본어, 한국어, 영어 등이 될 수 있습니다. 지금까지 CP_UTF8을 변환 매크로의 두 번째 매개 변수로 지정할 때이 문자열 조합에 문제가 없습니다. "그럼 왜 그냥 두 번째 매개 변수를 계속 사용하지 않는지"물어보십시오. 대답은 "코드에서 작업하는 팀 구성원이 쉽게 잊어 버릴 수 있기 때문입니다. 변환 매크로의 기본 1 매개 변수 버전을 사용하면 올바르게 작동하는 것이 좋을 것입니다."

답변

5

SetThreadLocale은 언어 식별자가 필요하지만 UTF-8은 언어 식별자가 아닙니다. 유니 코드 인코딩입니다. 토지 ID의 목적 중 하나는 128-255 범위의 ANSI 텍스트를 처리하는 방법을 시스템에 알리는 것입니다. 실제 언어가 주어지면 해당 문자를 다룰 때 해당 코드 페이지가 사용됩니다. UTF-8, OTOH는 유니 코드 텍스트의 압축 된 표현입니다. UTF-8 텍스트를 작성하려면 입력이 유니 코드 여야합니다. ANSI 텍스트를 감안할 때, 상위 범위의 문자를 변환하는 방법을 알지 못합니다. 이것은 "수동으로"수행 할 때, ANSI를 UTF-8로 변환하기 위해 먼저 지정된 코드 페이지와 함께 MultiByteToWideChar를 사용해야하며 그 다음에 만 결과 유니 코드 문자열을 UTF-8로 변환 할 수 있습니다.

이제 다시 질문에 - 나는 다른 길로 갈 것입니다. 추가 코드 페이지 매개 변수로 인해 많은 버그가 발생하면 숨기거나 (CT2A 클래스를 상속하고 두 번째 매개 변수를 수정하는) 매크로를 만드십시오.

+0

이 설명은 감사합니다. 그래, 나는 두 번째 매개 변수를 사용하려고한다고 생각한다. 한 번 스레드에 대한 코드 페이지를 설정하는 쉬운 방법이 아닌 것 같습니다. –