lihu129c 发表于 2015-11-6 11:16:49

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

  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.iyunv.com/topics/390028811?page=1#post-393044707)  

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

版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: FTP采用UTF8编码上传文件名中含有奇数个汉字时出错的解决方法