GetModuleFileNameA获取的包含中文字符的目录路径在系统中能正常显示的,为啥调用GetModuleFileNameA获取到的路径会有乱码呢?
系统中显示的中文字符是Unicode编码的,而当我们调用ANSI版本的GetModuleFileNameA获取路径时,GetModuleFileNameA函数内部会将Unicode编码的字符串转成ANSI编码的,转换时使用的是系统指向的本地ANSI字符编码库,如果程序需要的是UTF8,则不能正常识别路径。
由于Windows系统设置的非Unicode程序语言是中文简体,也就是提供的ANSI编码字符集,而我们的程序需要的是UTF8编码,需要转换:
ANSI--》Unicode--》UTF8
或者,直接获取系统的Unicode宽字节字符,再转UTF8:
GetModuleFileNameW获取Unicode--》UTF8