各位老大好, 我用FtpGetFile之类的windows FTP API去UTF8编码的FTP站点下东西不行,我觉得原因是FtpGetFile内部会对传入的lpszRemoteFile有CT2A(lpszRemoteFile, CP_ACP)之类的转化.
我试了种权宜之计,将一个utf8的串先CA2W(lpszRemoteFile, CP_ACP)弄成宽字符,将此宽字符传给FtpGetFileW,期望通过该函数内部的
CW2A(lpszRemoteFile, CP_ACP)操作,使传输在网线上的数据是一个utf8的串,这样服务器就刚好认识了。
表面上看这种思路没问题吧?可是,想当然始终是想当然啊,实际情况是将一个utf8按CP_ACP方式弄成宽字符再CP_ACP弄回来,他就不一定等价了。 我想FtpGetFileA是不是将传入的szFileName直接送网络上去呢,我就传给FtpGetFileA一个实际上是utf8的串,但结果很沮丧。我用嗅探器截获的数据显示,FtpGetFileA和FtpGetFileW实际在网络上跑的数据都一样的,反正不是正确的UTF8编码。 所以问题的关键是FtpGetFile内部的CT2A(lpszRemoteFile, CP_ACP)如果能变成CT2A(lpszRemoteFile, CP_UTF8)就万事大吉了,但不知道windows
提没提供这样的接口,貌似InternetSetOption函数没这功能。 郁闷,各位大大们遇到相似情况没,能否给点意见啊,是不是只有在socket层次上才根治这个问题呢,谢谢。
我试了种权宜之计,将一个utf8的串先CA2W(lpszRemoteFile, CP_ACP)弄成宽字符,将此宽字符传给FtpGetFileW,期望通过该函数内部的
CW2A(lpszRemoteFile, CP_ACP)操作,使传输在网线上的数据是一个utf8的串,这样服务器就刚好认识了。
表面上看这种思路没问题吧?可是,想当然始终是想当然啊,实际情况是将一个utf8按CP_ACP方式弄成宽字符再CP_ACP弄回来,他就不一定等价了。 我想FtpGetFileA是不是将传入的szFileName直接送网络上去呢,我就传给FtpGetFileA一个实际上是utf8的串,但结果很沮丧。我用嗅探器截获的数据显示,FtpGetFileA和FtpGetFileW实际在网络上跑的数据都一样的,反正不是正确的UTF8编码。 所以问题的关键是FtpGetFile内部的CT2A(lpszRemoteFile, CP_ACP)如果能变成CT2A(lpszRemoteFile, CP_UTF8)就万事大吉了,但不知道windows
提没提供这样的接口,貌似InternetSetOption函数没这功能。 郁闷,各位大大们遇到相似情况没,能否给点意见啊,是不是只有在socket层次上才根治这个问题呢,谢谢。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货