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


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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 针对中文文件名的问题,可以使用node.js的utf8编码解决。在使用jsftp,需要将文件名转换为utf8编码格式,以确保能够正确处理中文字符。具体的实现方法可以参考以下代码: ``` const JSFtp = require('jsftp'); const ftp = new JSFtp({ host: 'ftp.example.com', port: 21, user: 'username', pass: 'password' }); const fileName = '中文文件名.txt'; ftp.put(fileName, '/remote/path/' + fileName, (err) => { if (err) { console.error(err); } else { console.log('File uploaded successfully'); } }); ``` 在这个例子中,我们首先创建了一个jsftp实例,并传入ftp服务器的相关信息。然后,我们定义了一个文件名为“中文文件名.txt”的变量。在调用ftp.put()方法上传文件,我们将文件名以utf8编码格式传入,确保能够正确处理中文字符。 ### 回答2: 在处理中文文件名的情况下,可以采用以下方式解决: 1. 在浏览器端进行编码转换:通过使用JavaScript中的encodeURIComponent()函数将中文文件名编码为URI格式,再发送给服务器进行处理。服务器接收到请求后,再通过decodeURIComponent()进行解码。 2. 使用UTF-8编码:将网页的编码格式设置为UTF-8,在操作FTP使用UTF-8编码格式进行传输,以确保中文文件名被正确传输和保存。这可以通过设置HTTP头部的Content-Type为"charset=UTF-8"来实现。 3. 修改FTP服务器配置:有些FTP服务器默认不支持中文文件名,需要进行相应的配置。可以查阅FTP服务器的相关文档,了解如何在服务器中允许处理中文文件名的设置,并进行相应的修改。 4. 对中文进行编码转换:在传输中文文件名,可以将其转换为Unicode码或其他编码格式进行传输,然后在接收方进行编码解析。例如,可以使用JavaScript的escape()函数将中文文件名转换为十六进制编码,再进行传输。 5. 文件名转换为拼音或拼音首字母:对于支持的情况下,可以将中文文件名转换为拼音或拼音首字母,并使用英文字符代替中文字符进行传输。这样可以避免编码问题,但需注意可能会导致文件名不易识别。 需要注意的是,具体的解决方法可能与使用的FTP库或工具有关,因此在具体开发过程中,还需查阅相应文档和相关资源,根据工具或库的特性来解决中文文件名的问题。 ### 回答3: 要解决 JavaScript(JS)中处理中文文件名的问题,可以采取以下方法: 1. 使用URL编码:将中文文件名进行URL编码,例如使用encodeURIComponent()函数来对文件名进行编码。这样可以确保文件名中的中文字符被正确识别和处理。 2. 使用UTF-8编码:确保在与FTP服务器进行通信使用UTF-8编码。这可以通过在FTP连接指定编码方式来实现,例如在创建FTP连接使用"UTF-8"编码。 3. 修改服务器设置:在FTP服务器上设置字符集为UTF-8,确保服务器能够正确处理和显示中文文件名。这通常需要在FTP服务器的配置文件中进行相关设置。 4. 检查FTP客户端支持:确保所使用的FTP客户端软件能够正确处理和显示中文文件名。有候,问题可能出现在FTP客户端软件本身不支持中文文件名。 5. 使用多字节字符集(MBCS):如果使用的是Windows平台,可以考虑使用多字节字符集(MBCS)来处理中文文件名。MBCS是一种支持多字节字符的字符编码方式,在处理中文文件名较为常用。 综上所述,解决JS FTP针对中文文件名的问题可以通过URL编码、使用UTF-8编码、修改服务器设置、检查FTP客户端支持以及使用多字节字符集(MBCS)等方法来实现。根据具体情况选择合适的方法可以确保中文文件名能够正确处理和传输。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值