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

GetModuleFileNameA在从Unicode转为ANSI过程中可能导致中文路径乱码,因为系统默认的ANSI编码可能与程序需要的UTF8不一致。解决方案是使用GetModuleFileNameW获取Unicode路径后再转为UTF8,或直接进行两次转换:ANSI->Unicode->UTF8。
1525

被折叠的 条评论
为什么被折叠?



