不管是开发环境,还是生成环境,Linux的环境配置都很重要;大部分的Linux操作系统(如:大部分的Debian系统),默认都只有或者只激活了en_US.UTF-8
,如果只有en_US.UTF-8
的语言环境,可能就无法显示中文了。
所以,最好提前设置好语言环境。
问题分析
Linux下Java输出带中文的文件,出现问号或者中文乱码问题:
解决方法很简单,大概分为两个步骤:安装和设置字库、设置语言环境变量。最终效果:
需要注意:
- 已经由Java等程序输出的文件(
???
文件名),因为是生成文件时,缺少字符集;添加和更改中文后,还是显示???
。 - 一些教程会让你直接修改
/etc/default/locale
,但是个人不建议修改这个文件为zh
。更建议按本文方法,修改单用户语言。 - 本次使用腾讯云轻量应用服务器的Debian10进行实机演示嗷。
我使用腾讯云轻量应用服务器过程中,Debian有出现中文字库无法显示问题,通过这篇文章可以显示中文;CentOS没有出现这个问题,所以本篇文章主要讲Debian上的操作。
安装字库
首先,看看系统有没有中文字库:
代码语言:txt复制locale -a | grep zh_CN
如果你没有中文字库,需要先安装中文字库支持。
安装中文字体
在安装和设置中文字库前,我们先安装一下中文字体。安装中文字体很简单:
代码语言:shell复制# Debian
sudo apt install fonts-wqy-zenhei
# CentOS
sudo yum install kde-l10n-Chinese
一般上述字体就足够使用,如果你在后文配置后,依旧无法使用,可以尝试安装全部wqy字体:
代码语言:shell复制# Debian
sudo apt install xfonts-intl-chinese
sudo apt install wqy*
激活中文字库
之后,激活中文字体,CentOS一般不需要激活中文字库:
代码语言:shell复制# Debian
sudo apt install locales
sudo dpkg-reconfigure locales
之后,就会进行语言选择:
通过使用方向键
来浏览列表,并使用空格
来勾选激活区域设置。这里建议勾选en_US.UTF-8
、zh_CN. UTF-8 URF-8
等:
之后,回车:
选择默认系统语言,还是推荐还是用英文:
之后,再回车。系统会自动开始配置:
很多文章,会直接让你在这里直接设置为
zh_CN.UTF-8
,我个人不建议这样设置。灵活性有点低,个人建议设置到用户的环境变量(见下文)。
设置中文环境
现在,我们就可以设置中文环境了。
其实大部分程序,在有中文字库的情况下,就可以成功写入中文文件名文件和中文内容了。但是以防万一,我们再设置一下中文环境。
也很简单,根据你当前的Shell,设置环境变量,查看当前Shell:
代码语言:txt复制echo $SHELL
可以看到,我的Shell是zsh
,你们的可能是/bin/bash
,如果是和我一样,那么环境变量就是: ~/.zshrc
。如果是/bin/bash
,那么环境变量就是:~/.bashrc
。
# 编辑环境变量
vim ~/.zshrc
之后,在文末追加:
代码语言:txt复制# LANG
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export LC_LANG=zh_CN.UTF-8
最后,保存并退出后。重载环境变量:
代码语言:shell复制source ~/.zshrc
如果你不会
vim
命令操作,可以查看文章教程:终端文本编辑神器--Vim命令详解。如何配置Vim以及Vim插件?
现在,就可以查看效果了。
最终效果
现在,我们的Java 程序 ,写入文件名时候,就可以写中文了:
但是,需要注意:
- 已经运行的Java程序,需要重新运行。
- 一些虚拟终端,如:
screen
;需要关闭后重新打开。
如果还是没有生效,可以重启Linux。