linux环境下 java nio 文件名 乱码 utf-8 gbk-阿里云开发者社区

开发者社区> 白展糖> 正文

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重启了之后。才生效的。


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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python——文件IO
打印到屏幕 print 读取键盘输入 input: str = input('请输入:') print(str) raw_input 用法跟input相同,但是input函数能接收一个表达式作为输入,raw_input则不ok;另外,py3里面,已经没有这个函数了。
673 0
Python 文件I/O
读取键盘输入 # !/usr/bin/python # -*- coding: UTF-8 -*- s = raw_input("请输入内容:") print "输入的内容是 = " + s 结果: 请输入内容:I Love John 输入的内容是 = I Love John   打开和关闭文件 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
771 0
linux crontab执行脚本中文乱码问题
在linux中写了个定时脚本,其中包含中文字符。脚本手动运行一切正常,但是使用crontab运行后发现日志中应该出现中文的地方全是???等乱码。 分析出原因肯定是环境变量的问题。
917 0
+关注
白展糖
十多年的JAVA码农,带着小组向前冲
425
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载