- 浏览: 264173 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (88)
- JAVA / base (26)
- JAVA / web (12)
- JAVA / Lib-tools (5)
- SERVER / tomcat (4)
- DB / mysql (4)
- DB / mongodb (2)
- DB / memcached (2)
- DB / redis (2)
- WEB / Front-end (3)
- WEB / security (4)
- WEB / css (2)
- WEB / js (4)
- OS / linux (3)
- IT / Architecture (4)
- IT / other (2)
- Android (9)
- Go (1)
- Other (1)
- OS / Mac (2)
最新评论
-
Zero2Max:
哈哈,马士兵老师也发现了。
java实现接口的bug -
xly1981:
能像CSRF攻击一样带个图就更棒了
XSS跨站攻击 -
xmong:
df274119386 写道在javascript中看到下面的 ...
CSRF攻击与防御策略 -
df274119386:
在javascript中看到下面的语句 e.value = t ...
CSRF攻击与防御策略 -
xmong:
yzxqml 写道xmong 写道yzxqml 写道tomca ...
Tomcat集群
1,问题描述
web应用想通过Java读取linux系统文件显示到web页面上,结果中文文件名出现乱码?
问题场景描述:当用户通过浏览器访问tomcat服务器,请求查看某一路径下文件列表信息,tomcat的web应用调用getFilesByPath(String path)方法读取文件列表信息响应请求,页面中文文件名出现乱码。
代码如下:
文件类
java代码如下:
当将读取文件信息显示到web页面上时,中文文件名出现乱码。
2,解决方案
web系统调用该方法读取文件列表后,中文命名的文件或文件夹显示为乱码。出现乱码往往都是数据流编码不一致导致的,检查数据流编码,首先查看tomcat服务器和页面显示编码都是utf-8编码,在查看linux系统编码为iso-8859-15,当然我们也知道java默认采用的是Unicode编码,但这种默认Unicode编码不是我们想要的utf-8编码,所以我们需要自己转码。
解决方案1:
将linux系统编码修改为utf-8,该方案比较简单,不过要求用户有系统root权限才可以修改。
解决方案2:
通过java程序转码,将系统编码转换为utf-8编码。
页面显示文件名正常,但path参数在遍历文件的时候中文出现了乱码,导致路径不存在。
解决方法是将path参数从utf-8转换为系统编码,再根据path去遍历文件。
这样就可以解决java读linux系统文件名乱码问题。。。
解决乱码问题就是从源头追溯的显示,一路纠结编码就这么简单。。。
web应用想通过Java读取linux系统文件显示到web页面上,结果中文文件名出现乱码?
问题场景描述:当用户通过浏览器访问tomcat服务器,请求查看某一路径下文件列表信息,tomcat的web应用调用getFilesByPath(String path)方法读取文件列表信息响应请求,页面中文文件名出现乱码。
代码如下:
文件类
import java.io.Serializable; import java.util.Date; public class FileInfo implements Serializable{ /** * */ private static final long serialVersionUID = 1L; String name; long size; Date lastModified; boolean dir; public String getName() { return name; } public void setName(String name) { this.name = name; } public long getSize() { return size; } public void setSize(long size) { this.size = size; } public Date getLastModified() { return lastModified; } public void setLastModified(Date lastModified) { this.lastModified = lastModified; } public boolean isDir() { return dir; } public void setDir(boolean dir) { this.dir = dir; } }
java代码如下:
/** * 根据path路径查找出该路径下可视文件列表 * @param path * @return */ public List<FileInfo> getFilesByPath(String path){ List<FileInfo> fileList = new ArrayList<FileInfo>(); File file = new File(path); /** * 查找可视文件列表 */ File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File f) { return !f.isHidden();//过滤隐藏文件 } }); /** * java文件类型转换为web显示文件类 */ for (File f : files) { FileInfo fileInfo = new FileInfo(); fileInfo.setName(f.getName()); fileInfo.setSize(f.length()); fileInfo.setLastModified(new Date(f.lastModified())); fileInfo.setDir(f.isDirectory()); } return fileList; }
当将读取文件信息显示到web页面上时,中文文件名出现乱码。
2,解决方案
web系统调用该方法读取文件列表后,中文命名的文件或文件夹显示为乱码。出现乱码往往都是数据流编码不一致导致的,检查数据流编码,首先查看tomcat服务器和页面显示编码都是utf-8编码,在查看linux系统编码为iso-8859-15,当然我们也知道java默认采用的是Unicode编码,但这种默认Unicode编码不是我们想要的utf-8编码,所以我们需要自己转码。
解决方案1:
将linux系统编码修改为utf-8,该方案比较简单,不过要求用户有系统root权限才可以修改。
解决方案2:
通过java程序转码,将系统编码转换为utf-8编码。
/** * 根据path路径查找出该路径下可视文件列表 * @param path * @return */ public List<FileInfo> getFilesByPath(String path){ //获取系统编码 String encoding = System.getProperty("file.encoding"); List<FileInfo> fileList = new ArrayList<FileInfo>(); File file = new File(path); /** * 查找可视文件 */ File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File f) { return !f.isHidden(); } }); /** * java文件类型转换为web显示文件类型 */ for (File f : files) { FileInfo fileInfo = new FileInfo(); try { //将系统编码encoding转换为utf-8编码 fileInfo.setName(new String(f.getName().getBytes(encoding),"UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } fileInfo.setSize(f.length()); fileInfo.setLastModified(new Date(f.lastModified())); fileInfo.setDir(f.isDirectory()); } return fileList; }
页面显示文件名正常,但path参数在遍历文件的时候中文出现了乱码,导致路径不存在。
解决方法是将path参数从utf-8转换为系统编码,再根据path去遍历文件。
/** * 根据path路径查找出该路径下可视文件列表 * @param path * @return */ public List<FileInfo> getFilesByPath(String path) throws Exception{ //获取系统编码 String encoding = System.getProperty("file.encoding"); List<FileInfo> fileList = new ArrayList<FileInfo>(); try { //将path路径转码为系统编码 File file = new File(new String(path.getBytes("UTF-8"),encoding)); //判断文件路径是否存在,是否有读权限,如不存在或者没有权限则抛出异常 if(file.exists() && file.isDirectory() && file.canRead()){ /** * 查找可视文件 */ File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File f) { return !f.isHidden(); } }); /** * java文件类型转换为web显示文件类型 */ for (File f : files) { FileInfo fileInfo = new FileInfo(); //将系统编码encoding转换为utf-8编码 fileInfo.setName(new String(f.getName().getBytes(encoding),"UTF-8")); fileInfo.setSize(f.length()); fileInfo.setLastModified(new Date(f.lastModified())); fileInfo.setDir(f.isDirectory()); } }else{ throw new Exception("Paht:"+path+", exists:"+file.exists()+", canRead:"+file.isDirectory()); } } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } return fileList; }
这样就可以解决java读linux系统文件名乱码问题。。。
解决乱码问题就是从源头追溯的显示,一路纠结编码就这么简单。。。
发表评论
-
Java validation(java验证器实现)
2014-03-18 11:45 3732Java validation 1. java验证器 在 ... -
Memo class备注类信息
2014-03-18 09:52 910Memo Class 1. 什么是Memo Class Mem ... -
java annotation注解
2014-01-24 18:01 9571. Annotation的声明方式 An ... -
Java RMI
2013-03-28 15:12 1745Java Rmi 目录 1 JAVA RMI 1 ... -
java内部类
2013-03-19 16:25 1068Java内部类 目录 1 JAVA ... -
java多线程设计模式之订单模式
2013-03-11 14:00 2717Java多线程实现订单模式: 客户端线程向服务端发起请求后, ... -
java多线程设计模式之线程池处理请求
2013-03-08 17:50 1829Java实现线程池处理请求: 客户端线程发出请求,请求存入请 ... -
java多线程设计模式之异步处理请求
2013-03-08 12:36 4530Java实现多线程异步处理请求: Java实现多线程异步处理 ... -
java多线程设计模式之读写文件模式
2013-03-07 17:56 1608Java实现多线程读写数据 ... -
java多线程设计模式之生产者与消费者
2013-03-07 11:34 1081Java实现多线程生产者与消费者: 生产者线程负责生产产品 ... -
java多线程设计模式之文件保存
2013-03-06 16:16 1632Java实现多线程保存文件:两线程去保存文件,一个保存线程定时 ... -
java多线程设计模式之队列通信
2013-03-06 13:51 2519Java实现多线程处理队列请求通信:客户端线程向请求队列中不断 ... -
Java安全加密
2012-11-28 10:24 2005安全加密 目录 1 加密安全 1 1.1 应用的安全 1 ... -
图着色问题
2012-11-27 13:05 3150图着色问题 目录 1 图 ... -
JDK6新特性
2012-07-03 23:24 2906JDK6的新特性 JDK6的新特性之一_Desktop类 ... -
JDK7新特性
2012-07-03 15:39 3534JDK7新特性 一 JDK7新特性简介 准备 JDK7下载 ... -
JDK5新特性
2012-07-03 10:23 73JDK5.0新特性 1.自动封箱和自动解封(简单类型和封装类 ... -
java多线程
2012-06-15 15:12 1585Java多线程 目录 1 线 ... -
代理模式
2012-06-13 14:12 1399代理模式 目录 1 代理 ... -
java垃圾回收机制
2012-06-11 11:30 2569Java内存回收 目录 1 JAVA内存STACK和HE ...
相关推荐
### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名...
这通常是由于文件系统的编码不兼容或者终端的字符集设置不当导致的。解决这个问题涉及到多个方面,包括理解字符编码、查看和设置环境变量以及使用特定的命令行工具。下面将详细介绍如何在Linux下处理文件名乱码问题...
往往开发环境和生产环境在环境部署时会遇到很多奇怪的问题,此次word文档下载就被卡住了,通过一番努力终于...上传文件txt格式,内有方法详细的代码注释及原因说明,jar包比较常见,大家自行导入,希望可以帮到大家。
在Java编程中,使用FTPClient进行文件传输时,可能会遇到一个常见的问题,即当尝试创建中文目录或上传具有中文名称的文件时,这些目录名和文件名会显示为乱码,通常表现为“??”这样的形式。这个问题主要是由于FTP...
在不同的操作系统和文件系统中,对非ASCII字符(如中文字符)的支持方式不同,这可能导致乱码或无法正确读取文件。Java API本身提供了一些处理这种问题的方法,但需要正确理解和使用。 首先,我们要理解Java中的...
总之,当使用Java的`FileOutputStream`处理包含中文字符的文本时,需要通过`OutputStreamWriter`将其转换为字符流,并指定正确的字符编码(如UTF-8),这样才能确保中文字符在文件中正确显示,避免出现乱码。
6. **文件系统兼容**:不同的操作系统对非ASCII字符的支持程度不同,Windows、Linux和macOS在处理中文文件名时可能存在差异。因此,跨平台的应用需要特别注意文件系统的编码兼容性。 7. **编程库和框架**:如果你在...
4. 文件名编码转换:对于文件名乱码,可以使用专门的工具进行转换,如“File Renamer”或“Advanced Renamer”,这些工具能帮助批量转换文件名的编码。 5. 操作系统设置:在Windows系统中,可以通过修改注册表或者...
Linux 转换 Windows 文件编码格式脚本是将 Windows 上的文件编码格式转换为 UTF-8 编码,以便在移植 Windows 代码到 Linux 下时避免注释代码乱码和编码格式引起的编译错误。 该脚本使用 Bash shell 脚本语言编写,...
5. **文件命名规则**:不同的操作系统对文件名的编码处理方式不同,Windows和Unix/Linux系统可能存在差异,开发者需要考虑到这些兼容性问题。 6. **服务器环境配置**:服务器的环境配置也可能影响到文件名的处理,...
解决 Linux 系统 unzip 解压后中文名乱码的问题可以使用四种方法:使用 Python 脚本、使用 unzip 命令指定字符集、在环境变量中指定 unzip 参数、使用 Java 的 jar 命令解压 zip 文件。每种方法都可以解决中文名乱码...
如果ZIP文件包含中文文件名,确保你的Linux系统使用了UTF-8编码,这是大多数现代Linux发行版的默认设置。如果遇到中文乱码问题,可能需要检查并调整locale设置。 2. **在Windows上解压ZIP文件**: Windows操作...
在Linux环境下,BIRT(Business Intelligence and Reporting Tools)图表组件可能会遇到中文乱码的问题,这主要是由于Java虚拟机无法识别到支持中文字符的字体文件所导致。以下是一种解决该问题的详细步骤: 首先,...
原版的CKFinder可能在处理包含中文字符的文件名时遇到困难,尤其是在Linux环境下,因为Linux的文件系统(如EXT4)默认不支持UTF-8编码,这可能导致中文字符显示为乱码。为了解决这个问题,开发者对CKFinder的源代码...
对于文件系统的乱码问题,可以使用`ls --show-control-chars`命令来显示包含控制字符的文件名,这有助于在控制台中查看中文文件名。如果系统不支持GBK字符集,可能需要添加支持,如在Ubuntu中,可以通过编辑`/var/...
7. **文件系统支持**:某些文件系统(如FAT32)对非ASCII字符支持不佳,升级到支持Unicode的文件系统(如NTFS或ext4)可以避免此类问题。 通过以上步骤,我们通常可以有效地解决SmartUpload在处理中文文件名时的...
最近实验室做了一个项目,使用jspsmartupload来实现的文件的上传下载,原来在windows平台运行的挺好,但是后来系统移植到linux平台上,结果在上传或下载的文件名中有中文时就会出现乱码。后来查了网上一些人的解决...
- 对于开发者,可以编写自定义的解压脚本,通过编程语言(如Python、Java)来读取ZIP文件内容,识别并转换文件名的编码后再解压。这种方法适用于需要批量处理和二次开发的情况。 6. **预防措施** - 在创建ZIP文件...
在提供的压缩包中,有一个名为`simsun.ttc`的文件,这是宋体的TrueType Collection字体,适用于Windows和Mac系统,但在Linux系统中可能需要进行一些转换才能使用。对于.sfc或.ttf格式的字体文件,我们可以使用`ttf2...
在Linux环境中,尤其是在涉及到与Windows...通过以上策略,可以有效解决Linux系统下的乱码问题,无论是文件名、输入法还是程序显示。在处理多平台交互时,理解并正确处理编码问题至关重要,以免影响正常的工作和沟通。