문제

Visual Studio에서 "유니코드 문자 집합 사용"을 선택하여 MFC C++ 응용 프로그램을 구축 중입니다.UNICODE를 정의했고, CString이 16비트이고, 일본어 문자가 포함된 파일 이름을 처리하는 등의 작업을 수행했습니다.그러나 일본어 문자가 포함된 유니코드 문자열을 CComboBox(AddString 사용)에 넣으면 ?????로 표시됩니다.

저는 Windows XP Professional x64(영문)를 실행하고 있습니다.Windows 제어판의 국가 및 언어 옵션, 고급 탭을 사용하고 유니코드가 아닌 프로그램의 언어를 일본어로 설정하면 콤보 상자가 올바르게 보입니다.

따라서 나는 내 콤보 상자가 올바르게 보이도록 하고 "유니코드가 아닌 프로그램용 언어" 설정이 내 유니코드 프로그램의 동작을 변경하는 이유를 이해하고 싶습니다.Windows에 내 응용 프로그램이 유니코드 응용 프로그램임을 알리기 위해 수행해야 할 다른 작업이 있습니까?

어떤 도움을 주셔서 감사합니다!

도움이 되었습니까?

해결책

Windows는 호출하는 함수를 통해 유니코드 프로그램과 유니코드가 아닌 프로그램의 차이점을 알고 있습니다.대부분의 Windows API 함수는 두 가지 변형으로 제공됩니다. 하나는 비유니코드의 경우 A로 끝나고 다른 하나는 유니코드의 경우 W로 끝납니다.이러한 함수를 정의하는 포함 파일은 컴파일러 설정을 사용하여 자동으로 둘 중 하나를 선택합니다.

문자가 포함되지 않은 글꼴을 기본 UI 글꼴로 선택했기 때문에 문자가 제대로 나오지 않을 수 있습니다.

다른 팁

문자열은 어디서 얻나요?C 소스에 하드 코딩된 경우 AddString을 호출할 때 이미 손상되었을 가능성이 높습니다.

예를 들어 일부 유니코드 문자열을 std::string으로 "압착"하여 손상시키는 것을 막을 수 있는 방법은 없습니다.응용 프로그램이 유니코드로 컴파일된 경우에도 마찬가지입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top