大家好,很高兴再次与你们见面,我是你们的朋友全栈君。
在Windows系统上,文件名通常采用GBK编码,而文件内容的编码可以通过文本编辑器如EditPlus来查看或设置。
当将在Windows上正常显示的文件传输到Linux系统时,常常会因为中文编码问题导致文件名和文件内容出现乱码。
查看Linux系统的编码设置:
[root ~]# echo $LANGzh_CN.UTF-8[root ~]# localeLANG=zh_CN.UTF-8LC_CTYPE="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh_CN.UTF-8"LC_COLLATE="zh_CN.UTF-8"LC_MONETARY="zh_CN.UTF-8"LC_MESSAGES="zh_CN.UTF-8"LC_PAPER="zh_CN.UTF-8"LC_NAME="zh_CN.UTF-8"LC_ADDRESS="zh_CN.UTF-8"LC_TELEPHONE="zh_CN.UTF-8"LC_MEASUREMENT="zh_CN.UTF-8"LC_IDENTIFICATION="zh_CN.UTF-8"LC_ALL=
以上是基于CentOS 6.5的查询和设置。之前设置为USA.UTF-8,后来调整为支持中文的zh_CN.UTF-8,需要安装支持中文的软件包:
yum -y groupinstall chinese-support
修改和设置编码:
[root ~]# vim /etc/sysconfig/i18nLANG="zh_CN.UTF-8"[root ~]# source /etc/sysconfig/i18n
完成上述设置后,可以使用XFTP和XSHELL进行以下实验。
在XSHELL中,通过文件 -> 属性 -> 终端设置编码进行设置,XFTP暂时不做设置。

一、解决Linux文件名乱码问题:
创建包含中文字符的测试目录和测试文件,并通过XFTP上传到Linux服务器:

在XFTP中,中文显示一切正常。
在Linux系统中发现文件名出现乱码。同时使用file命令查看文件:

此时进行转码操作:
convmv --notest --nosmart -f gbk -t utf8 -r 文件或者目录
参数说明:
-f:从什么编码转换-t:转换成什么编码--nosmart:如果已经是UTF-8,忽略-r:包含所有子目录--notest:不加此参数只会列出需要转换的文件,不做实际转换,所以必须加上

通过上述步骤,已经解决了文件名乱码问题。接下来设置XFTP的编码以匹配Linux的编码。
在XFTP中,通过文件 -> 属性 -> 选项,将编码设置为UTF-8,并选择文件名传输编码。这样显示的文件名将直接使用UTF-8编码,Linux系统中就不会出现乱码。


通过上述设置,如果发现压缩包文件在服务器端解压后出现乱码,建议先在Windows系统中解压,然后将整个目录传输到服务器上,检查传输后的文件是否仍然出现乱码。通过实践,发现中文可以正常显示。
二、解决文件内容乱码问题:
使用cat命令查看文件内容时发现乱码:

使用iconv命令进行转码:
iconv -f gbk -t utf8 test测试.txt -o test测试.txt
通过测试,已经成功将文件内容乱码转码。
同时,如果不希望覆盖原文件,可以使用以下命令:
iconv -f gbk -t utf8 haha.txt > haha.txt.utf8
这种方法不会覆盖原文件,但原文件将为空。

对于从Windows传输过来的Shell脚本,需要进行转码:
yum install -y dos2unixdos2unix xxx.sh

通过上述两种方法,基本解决了从Windows到Linux系统的文件名和文件内容乱码问题。如果遇到新的问题,将会继续补充。
发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/87a57c9dce29e600b772912ff1c4c1c7原文链接:https://www.php.cn/link/c8377ad2a50fb65de28b11cfc628d75c
以上就是window到linux文件名乱码和文件内容乱码解决总结「建议收藏」的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/9521.html
微信扫一扫
支付宝扫一扫