linux环境下 java nio 文件名 乱码 utf-8 gbk

简介: 这个事情一下困扰了好几天,今天终于解决了。做个记录事情的原因为在linux下环境下需要用流输出一个文件,其实这是是件很简单的事情。但麻烦的是输出的文件中文件内容的确被编码成了GBK,可是文件名却一直是utf-8。

这个事情一下困扰了好几天,今天终于解决了。做个记录


事情的原因为在linux下环境下需要用流输出一个文件,其实这是是件很简单的事情。但麻烦的是输出的文件中文件内容的确被编码成了GBK,可是文件名却一直是utf-8。百思不得其解。也初步调过linux的字符集,确认了的确是GB2312.可是问题还是不能被解决。

回头还是以为程序的问题,把短的可怜的几段代码,反复测试,用byte【】把文件名都进行了GBK编码,然后字节输出,可是发现没有用。也试了改tomcat的强制gbk输出。

其实最后发现的问题,还是在于LINUX的字符集没有被真正改过来。


首先确认一件事情,我们常用的字节流编码,其实只能对流文件中的内容进行编码。

OutputStreamWriter fos = new OutputStreamWriter(new FileOutputStream(path),"GBK");   很熟悉的代码 吧,其中PATH,也就是文件的输出名称,是不能被编码的!!决定这个文件名编码是你的操作系统当前编码格式。


关于字符集:

一般来说要设置 linux 系统的环境变量只需要在 /etc/profile (全局) 或者 ~/.bashrc (单个用户) 即可,但是在本案例中没有用。你如要用locale去查看,发现已经变成gb2312,但!!BUT!!这是没有用的。

首先需要确认系统是不是有该字符集包:

/usr/share/i18n/charmaps(目录)
     这个目录下存放了该linux操作系统可用字符集的安装包,如果你的操作系统上没有安装某个字符集可以到这个目录下寻找安装包。例如:GB2312的安装包名字为“GB2312.gz


修改字符编码配置文件

# vi /etc/sysconfig/i18n

修改后内容如下:

LANG="zh_CN.GB2312"
SUPPORTED="zh_CN.GB2312:zh_CN:zh:en_US:en"
SYSFONT="latarcyrheb-sun16"

我直接把UTF-8的全去掉了。

接下来就是最重要的,一定要重启。不要以为linux不用重启,用类似于source这种命令去重应用。没有用的。。太天真了。

最后还是用 reboot重启了之后。才生效的。


我的天啊,花了两天的时间呢。


目录
相关文章
|
13天前
|
IDE Java 开发工具
在DOS环境下调试Java程序
在DOS环境下调试Java程序
21 1
|
13天前
|
Java Android开发
在Eclipse环境下调试Java程序
在Eclipse环境下调试Java程序
24 1
|
13天前
|
存储 监控 Java
深入探索Java语言的NIO(New I/O)技术
深入探索Java语言的NIO(New I/O)技术
|
21小时前
|
Oracle Java 关系型数据库
JAVA入门: 编程环境安装
JAVA入门: 编程环境安装
|
2天前
|
网络协议 Java API
全网最清晰JAVA NIO,看一遍就会
全网最清晰JAVA NIO,看一遍就会
10 0
|
8天前
|
Ubuntu Java Linux
Linux必备基础命令,JAVA程序员必备
Linux必备基础命令,JAVA程序员必备
|
9天前
|
Ubuntu Java Linux
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
|
9天前
|
Ubuntu Oracle Java
Linux|如何安装 Java
Linux|如何安装 Java
9 0
|
10天前
|
Oracle Java 关系型数据库
04. 【Java教程】在 Linux 上安装 Java
04. 【Java教程】在 Linux 上安装 Java
11 0
|
10天前
|
Java 关系型数据库 MySQL
【JavaEE进阶】 Linux搭建Java部署环境
【JavaEE进阶】 Linux搭建Java部署环境