FTP采用UTF8编码上传文件名中含有奇数个汉字时出错的解决方法

本文介绍了一种解决FTP服务器UTF-8编码环境下,使用CFtpConnection::PutFile上传含有奇数个汉字文件名时出现乱码或显示不全的问题。通过先上传后重命名的方法,并加入适当延迟确保重命名成功。

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

FTP服务器是UTF-8编码,当用CFtpConnection::PutFile上传文件,本地文件名中如果含有奇数个汉字(如"测试文.txt“),不把远程文件名转成UTF-8,不能上传成功,或者成功后显示的文件名是乱码。如果把"测试文.txt”转成了UTF-8,上传能成功,但显示出来的文件名却不准确(我的显示为“测试”没有后缀名),但把"测试文.txt”改成"测试.txt"或者“测试文档.txt”,都能正常显示出来,总之是奇数个中文字不正常,偶数个中文字就没问题。

刚在网上找了半天也没有答案,后来突发奇想,先上传,再重命名,结果居然解决了,我狂汗  - -!!!

具体:
先弄个临时的文件名,全部整成英文和数字的,不要含有中文,待他上传完成后,调用rename把刚才的临时文件名重命名为自己想要的名字(如UTF8转码后的“中国人.txt”),这样就OK了。。。。
我在运行程序时注意到,在上传完成后马上进行重命名操作会失败,而调试时是成功的,代码完全一样,唯一不同的是调试是一步一步的走,而运行是瞬间走完,所以可以判断出是间隔时间上的问题,需要在rename之前加上延时或者循环直至成功。
我的代码

BOOL bUploaded = m_pFtpConnection->PutFile(LocalPath,ServerPathTemp,FTP_TRANSFER_TYPE_BINARY,1);
  
if(!bUploaded)
{ 
    AfxMessageBox("文件上传失败!");
    return;
} 
while(!m_pFtpConnection->Rename(ServerPathTemp,theApp.ANSIToUTF8(ServerPath)))//ANSIToUTF8是我自己写的转码函数
{ 
    Sleep(1);
} 


这是我在论坛中写到的(  http://bbs.youkuaiyun.com/topics/390028811?page=1#post-393044707  )


具体原因尚不明确,仅有此解决方法,还望大虾指明原因。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值