2012-11-17 3 views
0

나는이 코드를 msn (Obtaining a file name from a file handle)에 사용하여 findfirstchangenotification에서 가져온 파일 핸들의 파일 이름을 가져 왔습니다."파일 핸들에서 파일 이름"의 잘못된 인코딩

하지만 이제 문제는 결과 문자열의 인코딩이 어떻게 든 잘못되었다는 것입니다. 모든 문자 대신 한 문자 만 표시됩니다 (일반적으로 물음표).

그래서 내 코드는 GetMappedFileName을 호출하고 물음표가 표시됩니다.

if (GetMappedFileName (GetCurrentProcess(), 
         pMem, 
         pszFilename, 
         MAX_PATH)) 

왜?

+0

단일 문자 만 보는 것은 wchar_t * 문자열을 char * 문자열로 캐스팅하는 확실한 신호입니다. 그런 종류의 캐스트는 컴파일러를 닫아서 잘못하고 있다는 것을 알려주려고합니다. 캐스트하지 마십시오. 유니 코드를 일관되게 사용하십시오. –

+0

이것은 아주 좋은 질문입니다. – bmargulies

답변

2

GetMappedFileName의 'A'양식은 현재 ACP에서만 문자를 전달할 수 있습니다. 파일 이름에 현재 ACP에없는 문자가 있으므로 물음표가 표시됩니다.

파일 이름에 현재 ACP에 표현이없는 유니 코드 문자가 포함되어 있으면 물음표가 표시됩니다. API의 'W'형식을 호출하여 파일 이름의 유니 코드 형식을 가져온 다음이를 사용하여 수행 할 작업을 결정해야합니다.