Windows上创建的文件,上传到Linux服务器,文件名乱码?
事情的起因是这样的...
最近有这样一个需求:在Java Web工程中读取本地某一个文件夹(固定路径,写在配置文件中)下的所有文件,然后将其导入到系统中。最直接的方案就是使用java.io.File的listFiles方法列出这个文件夹中的所有文件,然后在做处理,我们也是这样做的。
在本地测试没有任何问题,但是一旦部署到生产环境(Linux系统环境),问题就来了:由于文件是通过FTP上传到固定文件夹中的,所以有一些中文名称的文件,在上传到Linux系统中后,就出现了乱码,程序也无法读取到。
于是开始检查tomcat编码、操作系统编码格式,都统一设置为UTF-8。
Tomcat:
Linux 服务器编码:
注:检查操作系统编码命令为echo $LANG。查看操作系统语言命令:locale
统一编码后,问题依然存在。这时候才意识到,由于文件是在windows下生成的,默认编码都是gbk,所以需要将文件名称转码。
使用 convmv 将文件名转码
将文件名称转码,需要用到 convmv,这是一个转码工具。
在线安装 convmv
Linux中安装命令如下:
如果系统没有联网,或者屏蔽了yum命令,可以先下载程序包,然后安装。
使用程序包安装步骤
1).下载
下载地址为:https://pkgs.org/download/convmv
根据操作系统版本选择相应的版本下载:
找到下载地址:
2).安装
将文件拷贝到一个路径下(比如home),执行安装命令:
使用 convmv 对中文文件名进行转码
安装完 convmv 之后,就可使用 convmv 转码中文文件名了。为了操作方便,可写一个shell脚本,将文件名称转码:
上述命令,是将 /opt/ftp 路径下的所有文件名,都统一转码为utf8。
这样中文名称的文件就能被程序读取到了。
在 Java Web 工程中应用的时候,每次有新文件上传,就手动执行一下上述shell脚本,显然是不现实的,所以最简单的方法,就是使用 Java 调用 shell 脚本,让其自动转码。
Java 调用 shell 脚本的代码如下:
至此,问题解决。
以上就是本次分享全部内容,欢迎讨论。
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023