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


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


目录
相关文章
|
Java 应用服务中间件 Linux
在Java 12环境中配置和部署Apache Tomcat的步骤。
这段部署Tomcat的冒险旅程充满技术挑战,但同时也像游戏一样充满乐趣。它需要你提前准备,仔细执行,并随时准备解决意外情况。成功后,你就可以在这匹强壮的网络野马上,带着你的Java应用,冲向Web开发的璀璨星空。
334 56
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
1179 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
12月前
|
传感器 机器学习/深度学习 算法
Java 大视界 -- Java 大数据在智能农业温室环境调控与作物生长模型构建中的应用(189)
本文探讨了Java大数据在智能农业温室环境调控与作物生长模型构建中的关键应用。通过高效采集、传输与处理温室环境数据,结合机器学习算法,实现温度、湿度、光照等参数的智能调控,提升作物产量与品质。同时,融合多源数据构建精准作物生长模型,助力农业智能化、精细化发展,推动农业现代化进程。
|
Linux
SecureCRT连接Linux时乱码问题
本文详细介绍了在使用SecureCRT连接Linux服务器时出现乱码问题的解决方法,包括设置SecureCRT字符编码、检查和配置Linux服务器字符编码、调整终端设置等。通过这些方法,您可以有效解决SecureCRT连接Linux时的乱码问题,确保正常的终端显示和操作。希望本文能帮助您在实际操作中更好地解决类似问题,提高工作效率。
1885 17
|
Java API Docker
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
以上内容是一个简单的实现在Java后端中通过DockerClient操作Docker生成python环境并执行代码,最后销毁的案例全过程,也是实现一个简单的在线编程后端API的完整流程,你可以在此基础上添加额外的辅助功能,比如上传文件、编辑文件、查阅文件、自定义安装等功能。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
|
运维 Cloud Native Java
postman发起post请求遇到报错:java.io.FileNotFoundException (文件名、目录名或卷标语法不正确。)
遇到bug报错,多猜可能的原因,控制变量反复测试,直至找到问题的关键,然后再思考如何解决或者回避。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
554 5
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
399 4
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决