learning_record_doc/ubuntu/Linux 下解决 Java 输出文件,中文变问号和中文乱码问题.md

134 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [blog.csdn.net](https://blog.csdn.net/weixin_43890033/article/details/122131197)
### 目录
* [安装字库](#_9)
* * [安装中文字体](#_16)
* [激活中文字库](#_31)
* [设置中文环境](#_48)
* [最终效果](#_76)
Linux 下 Java 输出带中文的文件,出现问号或者中文[乱码](https://so.csdn.net/so/search?q=%E4%B9%B1%E7%A0%81&spm=1001.2101.3001.7020)问题:
![](assets/5f05716ed04f48c080981fbe3a2f76ce.png)
解决方法很简单,大概分为两个步骤:安装和设置字库、设置语言环境变量。最终效果:
![](assets/f1217a97bebf47af847b262e8c6af524.png)
需要注意:
* 已经由 Java 等程序输出的文件(`???`文件名),因为是生成文件时,缺少字符集;添加和更改中文后,还是显示`???`。
* 一些教程会让你直接修改`/etc/default/locale`,但是个人不建议修改这个文件为`zh`。
安装字库
====
首先,看看系统有没有中文字库:
```
locale -a | grep zh_CN
```
![](assets/6b9f1fd3cbae498f81bc734c0e1e513a.png)
如果你没有中文字库,需要先安装中文字体。
安装中文字体
------
安装中文字体很简单:
```
# Debian
sudo apt install fonts-wqy-zenhei
# CentOS
sudo yum install kde-l10n-Chinese
```
一般上述字体就足够使用,如果你在后文配置后,依旧无法使用,可以尝试安装全部 wqy 字体:
```
# Debian
sudo apt install xfonts-intl-chinese
sudo apt install wqy\*
```
![](assets/c40ba4901cf64719a342fec89de50329.png)
激活中文字库
------
之后激活中文字体CentOS 一般不需要激活中文字库:
```
# Debian
sudo apt install locales
sudo dpkg-reconfigure locales
```
之后,就会进行语言选择:
![](assets/2aa05b0bdc0f4fe6b6e87cb6f5be4132.png)
通过使用`方向键`来浏览列表,并使用`空格`来勾选激活区域设置。这里建议勾选`en_US.UTF-8`、`zh_CN. UTF-8 URF-8` 等:
![](assets/634f96ea28654d0eb785870dbff30e66.png)
之后,回车:
选择默认系统语言,还是推荐用英文:
![](assets/dfdd550aa39645fbb6e4af83dad2b173.png)
之后,再回车。系统会自动开始配置:
![](assets/fd6ca3f8abcc4cd99496126c49125d1c.png)
> 很多文章,会直接让你在这里直接设置为`zh_CN.UTF-8`,我个人不建议这样设置。灵活性有点低,个人建议设置到用户的环境变量(见下文)。
设置中文环境
======
现在,我们就可以设置中文环境了。也很简单,根据你当前的 Shell设置环境变量查看当前 Shell
```
echo $SHELL
```
![](assets/fe128a2af10140af9a57262bc83636a5.png)
可以看到,我的 Shell 是`zsh`,你们的可能是`/bin/bash`,如果是和我一样,那么环境变量就是: `~/.zshrc`。如果是`/bin/bash`,那么环境变量就是:`~/.bashrc`。
```
# 编辑环境变量
vim ~/.zshrc
```
![](assets/bc18570392904484b79e6643af4d2495.png)
之后,在文末追加:
```
# LANG
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export LC_LANG=zh_CN.UTF-8
```
![](assets/01e4de9a92894823926700f8d7527f5b.png)
最后,保存并退出后。重载环境变量:
```
source ~/.zshrc
```
> 如果你不会`vim`命令操作,可以查看文章教程:[终端文本编辑神器Vim 命令详解。如何配置 Vim 以及 Vim 插件?](https://www.mintimate.cn/2021/08/25/vim/)
现在,就可以查看效果了。
最终效果
====
现在,我们的 Java 程序 ,写入文件名时候,就可以写中文了:
![](assets/b3bae3ffc05d4eeb90f411e63b0bd770.png)
但是,需要注意:
* 已经运行的 Java 程序,需要重新运行。
* 一些虚拟终端,如:`screen`;需要关闭后重新打开。
如果还是没有生效,可以重启 Linux。