GetModuleFileNameA中文路径乱码问题

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GetModuleFileNameA获取的包含中文字符的目录路径在系统中能正常显示的,为啥调用GetModuleFileNameA获取到的路径会有乱码呢?

系统中显示的中文字符是Unicode编码的,而当我们调用ANSI版本的GetModuleFileNameA获取路径时,GetModuleFileNameA函数内部会将Unicode编码的字符串转成ANSI编码的,转换时使用的是系统指向的本地ANSI字符编码库,如果程序需要的是UTF8,则不能正常识别路径。

由于Windows系统设置的非Unicode程序语言是中文简体,也就是提供的ANSI编码字符集,而我们的程序需要的是UTF8编码,需要转换:

ANSI--》Unicode--》UTF8

或者,直接获取系统的Unicode宽字节字符,再转UTF8:

GetModuleFileNameW获取Unicode--》UTF8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值