`
coding1688
  • 浏览: 238794 次
  • 来自: 上海
社区版块
存档分类
最新评论

由ftp4j导致的中文乱码问题的解决方法

阅读更多

 

由ftp4j导致的中文乱码问题的解决方法

本文来自:http://www.vktone.com/articles/ftp4j_chaos.html

ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能。可以用来传输文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、改名、移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括:通过 TCP/IP直连,通过FTP代理、HTTP代理、SOCKS4/4a代理和SOCKS5代理连接、通过SSL安全连接等。

在本站的博客系统后台管理程序中就使用了ftp4j作为博客上传至空间的组件,但在开始使用的时候,发现将静态网页上传至空间后,用浏览器打开是乱码(惨不忍睹),要手动修改成UTF-8编码才能正常浏览,实际上所有网页是采用GBK编码的。

首页的html开头部分如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
    <title>移动互联网技术及应用 - V客小站 - V客小站</title>

使用Linux下的hexdump工具查看如下,注意黄色背景的部分:

[root@localhost blog_wwwroot]# hexdump -C index.html | head -100
00000000  3c 21 44 4f 43 54 59 50  45 20 68 74 6d 6c 20 50  |<!DOCTYPE html P|
00000010  55 42 4c 49 43 20 22 2d  2f 2f 57 33 43 2f 2f 44  |UBLIC "-//W3C//D|
00000020  54 44 20 58 48 54 4d 4c  20 31 2e 30 20 54 72 61  |TD XHTML 1.0 Tra|
00000030  6e 73 69 74 69 6f 6e 61  6c 2f 2f 45 4e 22 20 22  |nsitional//EN" "|
00000040  68 74 74 70 3a 2f 2f 77  77 77 2e 77 33 2e 6f 72  |http://www.w3.or|
00000050  67 2f 54 52 2f 78 68 74  6d 6c 31 2f 44 54 44 2f  |g/TR/xhtml1/DTD/|
00000060  78 68 74 6d 6c 31 2d 74  72 61 6e 73 69 74 69 6f  |xhtml1-transitio|
00000070  6e 61 6c 2e 64 74 64 22  3e 0a 3c 68 74 6d 6c 20  |nal.dtd">.<html |
00000080  78 6d 6c 6e 73 3d 22 68  74 74 70 3a 2f 2f 77 77  |xmlns="http://ww|
00000090  77 2e 77 33 2e 6f 72 67  2f 31 39 39 39 2f 78 68  |w.w3.org/1999/xh|
000000a0  74 6d 6c 22 20 78 6d 6c  3a 6c 61 6e 67 3d 22 7a  |tml" xml:lang="z|
000000b0  68 2d 43 4e 22 20 6c 61  6e 67 3d 22 7a 68 2d 43  |h-CN" lang="zh-C|
000000c0  4e 22 3e 0a 3c 68 65 61  64 3e 0a 09 3c 74 69 74  |N">.<head>..<tit|
000000d0  6c 65 3e d2 c6 b6 af bb  a5 c1 aa cd f8 bc bc ca  |le>.............|
000000e0  f5 bc b0 d3 a6 d3 c3 20  2d 20 56 bf cd d0 a1 d5  |....... - V.....|
000000f0  be 20 2d 20 56 bf cd d0  a1 d5 be 3c 2f 74 69 74  |. - V......</tit|
00000100  6c 65 3e 0a 09 3c 6d 65  74 61 20 68 74 74 70 2d  |le>..<meta http-|

下面是从空间下载的文件内容,其中黄色背景的部分与上面对应:(很显然,是不一样的)

[root@localhost ~]# curl -s http://www.vktone.com/ | hexdump -C index.html | head -100 00000000  3c 21 44 4f 43 54 59 50  45 20 68 74 6d 6c 20 50  |<!DOCTYPE html P| 00000010  55 42 4c 49 43 20 22 2d  2f 2f 57 33 43 2f 2f 44  |UBLIC "-//W3C//D| 00000020  54 44 20 58 48 54 4d 4c  20 31 2e 30 20 54 72 61  |TD XHTML 1.0 Tra| 00000030  6e 73 69 74 69 6f 6e 61  6c 2f 2f 45 4e 22 20 22  |nsitional//EN" "| 00000040  68 74 74 70 3a 2f 2f 77  77 77 2e 77 33 2e 6f 72  |http://www.w3.or| 00000050  67 2f 54 52 2f 78 68 74  6d 6c 31 2f 44 54 44 2f  |g/TR/xhtml1/DTD/| 00000060  78 68 74 6d 6c 31 2d 74  72 61 6e 73 69 74 69 6f  |xhtml1-transitio| 00000070  6e 61 6c 2e 64 74 64 22  3e 0a 3c 68 74 6d 6c 20  |nal.dtd">.<html | 00000080  78 6d 6c 6e 73 3d 22 68  74 74 70 3a 2f 2f 77 77  |xmlns="http://ww| 00000090  77 2e 77 33 2e 6f 72 67  2f 31 39 39 39 2f 78 68  |w.w3.org/1999/xh| 000000a0  74 6d 6c 22 20 78 6d 6c  3a 6c 61 6e 67 3d 22 7a  |tml" xml:lang="z| 000000b0  68 2d 43 4e 22 20 6c 61  6e 67 3d 22 7a 68 2d 43  |h-CN" lang="zh-C| 000000c0  4e 22 3e 0a 3c 68 65 61  64 3e 0a 09 3c 74 69 74  |N">.<head>..<tit| 000000d0  6c 65 3e e7 bb 89 e8 af  b2 e5 a7 a9 e6 b5 9c e6  |le>.............| 000000e0  8e 95 e4 bb 88 e7 bc 83  e6 88 9e e5 a6 a7 e9 8f  |................| 000000f0  88 ee 88 9a e5 bc b7 e6  90 b4 e6 97 82 e6 95 a4  |................| 00000100  20 2d 20 56 e7 80 b9 e3  88 a0 e7 9a ac e7 bb 94  | - V............| 00000110  ef bf bd 20 2d 20 56 e7  80 b9 e3 88 a0 e7 9a ac  |... - V.........| 00000120  e7 bb 94 ef bf bd 2f 74  69 74 6c 65 3e 0a 09 3c  |....../title>..<|

仔细想了一下,我本地文件的编码为GBK,而用浏览器浏览空间里的文件需要改成UTF-8编码才对,这应该是ftp4j在上传文件时进行了编码转换(或者它默认把文件当成UTF-8编码的)。为了避免ftp4j自动转换,应该采用binary方式传送,在上传之前进行设置即可。 client.setType(FTPClient.TYPE_BINARY); client.upload(filename); 下面的文字是从ftp4j的官方文档中摘录下来的,说明了ftp4j对文本和二进制传输方式的处理方式: http://www.sauronsoftware.it/projects/ftp4j/manual.php?PHPSESSID=l7o2bb276feu51v4p8cih0sq81#16 Another data transfer key concept concerns the binary and the textual types. When a transfer is binary the file is treated as a binary stream, and it is stored by the target machine as it is received from the source. A textual data transfer, instead, treats the transferred file as a character stream, performing charset transformation. Suppose your client is running on a Windows platform, while the server runs on UNIX, whose default charsets are usually different. The client send a file to the server selecting textual type. The client assumes that the file is encoded with the machine standard charset, so it decodes every character and encodes it in an intermediate charset before sending. The server receives the stream, decode the intermediate charset and encodes the file with its machine default charset before storing. Bytes has been changed, but contents are the same. You can choose your transfer type calling: client.setType(FTPClient.TYPE_TEXTUAL);
client.setType(FTPClient.TYPE_BINARY);
client.setType(FTPClient.TYPE_AUTO);

The TYPE_AUTO constant, which is also the default one, let the client pick the type automatically: a textual transfer will be performed if the extension of the file is between the ones the client recognizes as textual type markers. File extensions are sniffed through a FTPTextualExtensionRecognizer (it.sauronsoftware.ftp4j.FTPTextualExtensionRecognizer) instance. The default extension recognizer, which is an instance of it.sauronsoftware.ftp4j.recognizers.DefaultTextualExtensionRecognizer, recognizes these extensions as textual ones:

abc acgi aip asm asp c c cc cc com conf cpp
csh css cxx def el etx f f f77 f90 f90 flx
for for g h h hh hh hlb htc htm html htmls
htt htx idc jav jav java java js ksh list
log lsp lst lsx m m mar mcf p pas php pl pl
pm py rexx rt rt rtf rtx s scm scm sdml sgm
sgm sgml sgml sh shtml shtml spc ssi talk
tcl tcsh text tsv txt uil uni unis uri uris
uu uue vcs wml wmls wsc xml zsh

You can build your own recognizer implementing the FTPTextualExtensionRecognizer interface, but maybe you'll like more to instance the convenience class ParametricTextualExtensionRecognizer (it.sauronsoftware.ftp4j.recognizers.ParametricTextualExtensionRecognizer). Anyway, don't forget to plug your recognizer in the client:

client.setTextualExtensionRecognizer(myRecognizer);

本文来自:http://www.vktone.com/articles/ftp4j_chaos.html

更多精彩内容请访问:http://www.vktone.com/

 

2
2
分享到:
评论

相关推荐

    Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    在Java中实现FTP(File Transfer Protocol)文件上传和下载时,可能会遇到各种问题,如速度慢、中文乱码以及多文件下载等。以下将详细解释如何解决这些问题,并提供相关的代码示例。 首先,针对文件上传慢的问题,...

    FTP 文件的上传下载

    FTP协议本身并不直接支持Unicode编码,可能导致中文文件名的乱码问题。为了解决这个问题,开发者可能需要确保FTP客户端和服务器之间进行正确的字符编码转换。例如,可以使用`FTPClient`的`setControlEncoding()`方法...

    FTP构建文档

    4. **解决乱码问题**: - 调整客户端或服务器端的字符集设置。 - 对于服务器端,可以在`/etc/vsftpd/vsftpd.conf`中设置`utf8_filesystem=YES`。 - 客户端可以通过FTP客户端软件的设置来调整字符集。 #### 三、...

    局域网文件共享

    在本项目中,用户能够访问部署在服务器上的文件系统,特别强调了对中文路径的支持,这表明系统已经解决了中文编码可能导致的乱码问题,确保了在非英文操作系统环境下也能正常工作。然而,系统对特殊字符如空格和加号...

    hhhhh安卓开发教程大全

    hhhhh安卓开发教程大全

    avem-labs_Avem_1740990015.zip

    avem-labs_Avem_1740990015.zip

    25883-mofangmall.com 微信群管理机器人系统网站.zip

    微信群机器人管理系统源码 微信群机器人管理系统源码 支持同登陆多个微信 源码类型: C/S 开发环境: VS2010 SQL2008R2 菜单功能 1、支持同时登录多个微信 2、支持机器人聊天(笑话,成语接龙、故事会、智力等等) 3、支持签到 4、可自定义回复 5、可自定义红包语 6、支持定期发送公告(如群规,广告)等 1、WeChatRobots后台配置web版 2、数据库在WeiChartGroup.Net/app_data中,附加即可

    https://upload.csdn.net/creation/uploadResources?spm=1003.2018.3001.4314

    https://upload.csdn.net/creation/uploadResources?spm=1003.2018.3001.4314

    名字微控制器_STM32_课程_DeepBlue_1740989720.zip

    名字微控制器_STM32_课程_DeepBlue_1740989720.zip

    S7-200Smart恒压供水程序示例与485通讯实践:操作指南与案例解析,S7-200 Smart可编程控制器恒压供水程序设计与实现,附带485通讯范例,S7-200Smart 恒压供水程序样例+4

    S7-200Smart恒压供水程序示例与485通讯实践:操作指南与案例解析,S7-200 Smart可编程控制器恒压供水程序设计与实现,附带485通讯范例,S7-200Smart 恒压供水程序样例+485通讯样例 ,S7-200Smart; 恒压供水程序样例; 485通讯样例,S7-200Smart程序样例:恒压供水及485通讯应用示例

    Java读写Mifare M1卡IC卡源码

    Java使用JNA、JNI两种不同方式调用DLL、SO动态库方式读写M1卡源码,支持读写M1卡扇区数据、修改IC卡扇区密钥、改写UID卡卡号等功能,支持Windows系统,同时支持龙芯Mips、LoongArch、海思麒麟鲲鹏飞腾Arm、海光兆芯x86_Amd64等架构平台的国产统信、麒麟等Linux系统,内有jna-4.5.0.jar包,vx13822155058 qq954486673

    UDP协议接收和发送数据示例JAVA

    UDP协议接收和发送数据示例JAVA

    VU-DBS项目:深脑刺激器的全程辅助

    本文介绍了范德堡大学深脑刺激器(DBS)项目,该项目旨在开发和临床评估一个系统,以辅助从规划到编程的整个过程。DBS是一种高频刺激治疗,用于治疗运动障碍,如帕金森病。由于目标区域在现有成像技术中可见性差,因此DBS电极的植入和编程过程复杂且耗时。项目涉及使用计算机辅助手术技术,以及一个定制的微定位平台(StarFix),该平台允许在术前进行图像采集和目标规划,提高了手术的精确性和效率。此外,文章还讨论了系统架构和各个模块的功能,以及如何通过中央数据库和网络接口实现信息共享。

    图像识别项目源码资源(Python和C++)

    图像识别”项目源码资源(Python和C++)

    虚拟同步电机与并电网模型的Simulink仿真参数配置与直接使用指南,虚拟同步电机与并电网模型的Simulink仿真:参数齐全,直接使用,同步电机simulink仿真 并电网模型仿真 参数设置好了

    虚拟同步电机与并电网模型的Simulink仿真参数配置与直接使用指南,虚拟同步电机与并电网模型的Simulink仿真:参数齐全,直接使用,同步电机simulink仿真 并电网模型仿真 参数设置好了,可直接使用 ,虚拟同步电机; simulink仿真; 并电网模型仿真; 参数设置; 使用,虚拟同步电机Simulink仿真与并电网模型参数化应用

    三菱FX3U与力士乐VFC-x610变频器通讯案例详解:PLC控制下的变频器操作与设置程序,含接线方式及昆仑通态触摸屏操作指南,三菱FX3U与力士乐VFC-x610变频器通讯案例详解:接线、设置与程序

    三菱FX3U与力士乐VFC-x610变频器通讯案例详解:PLC控制下的变频器操作与设置程序,含接线方式及昆仑通态触摸屏操作指南,三菱FX3U与力士乐VFC-x610变频器通讯案例详解:接线、设置与程序注解,实现频率设定、启停控制与实时数据读取功能。,三菱FX3U与力士乐VFC-x610变频器通讯程序三菱FX3U与力士乐VFC-x610变频器通讯案例程序,有注释。 并附送程序,有接线方式,设置。 器件:三菱FX3U的PLC,力士乐VFCx610变频器,昆仑通态,威纶通触摸屏。 功能:实现频率设定,启停控制,实际频率读取等。 ,三菱FX3U;力士乐VFC-x610变频器;通讯程序;案例程序;注释;接线方式;设置;频率设定;启停控制;实际频率读取;昆仑通态;威纶通触摸屏。,三菱FX3U与力士乐VFC-x610变频器通讯程序及案例:频率控制与读取实践

    xmselect测试用例~~~~~~~~~~~~~~

    xmselect测试用例~~~~~~~~~~~~~~

    Unity-游戏开发-模型资源-科幻武器

    总共包含 32 款 AAA 级科幻武器。四种武器类型,每种有 8 种不同的纹理变化! 所有内容均采用 PBR 材质,可直接用于开发游戏!

    python词云生成器,将txt文本自动分割生成词云图

    python词云生成器,将txt文本自动分割生成词云图

    基于物联网智能化平台的智慧园区解决方案PPT(28页).pptx

    智慧园区,作为现代城市发展的新形态,旨在通过高度集成的信息化系统,实现园区的智能化管理与服务。该方案提出,利用智能手环、定制APP、园区管理系统及物联网技术,将园区的各类设施与设备紧密相连,形成一个高效、便捷、安全的智能网络。从智慧社区到智慧酒店,从智慧景区到智慧康养,再到智慧生态,五大应用板块覆盖了园区的每一个角落,为居民、游客及工作人员提供了全方位、个性化的服务体验。例如,智能手环不仅能实现定位、支付、求助等功能,还能监测用户健康状况,让科技真正服务于生活。而智慧景区的建设,更是通过大数据分析、智能票务、电子围栏等先进技术,提升了游客的游玩体验,确保了景区的安全有序。 尤为值得一提的是,方案中的智慧康养服务,展现了科技对人文关怀的深刻体现。通过智慧手环与传感器,自动感知老人身体状态,及时通知家属或医疗机构,有效解决了“空巢老人”的照护难题。同时,智慧生态管理系统的应用,实现了对大气、水、植被等环境要素的实时监测与智能调控,为园区的绿色发展提供了有力保障。此外,方案还提出了建立全域旅游营销平台,整合区域旅游资源,推动旅游业与其他产业的深度融合,为区域经济的转型升级注入了新的活力。 总而言之,这份智慧园区建设方案以其前瞻性的理念、创新性的技术和人性化的服务设计,为我们展示了一个充满智慧与活力的未来园区图景。它不仅提升了园区的运营效率和服务质量,更让科技真正融入了人们的生活,带来了前所未有的便捷与舒适。对于正在规划或实施智慧园区建设的决策者而言,这份方案无疑提供了一份宝贵的参考与启示,激发了他们对于未来智慧生活的无限遐想与憧憬。

Global site tag (gtag.js) - Google Analytics