今天使用的 mac 的 Terminal.app 连接服务器,启动一个 java 进程,发现这个 java 服务的中的中文出现了乱码,于是我在启动的时候设置了一下启动参数 -Dfile.encoding=utf-8
试了一下,发现中文不乱码了,
但是同事说,他昨天也启动过这个 java 进程,中文并没有乱码,并且这期间也没有修改过服务器的任何配置,(同事使用的是 win 的 xshell ),我感觉非常奇怪,基本可以排除服务器的关系,似乎是和使用的终端有关。
于是我移除了 -Dfile.encoding=utf-8
参数,使用 Termius.app 这个工具登录了服务,启动这个 java 进程观察,发生也是没有乱码的。
到此,基本可以确定,不同的终端的确是影响的服务器的一些环境变量了。
于是我写了一个小测试类。用两个终端登录服务器后,执行。
public class Test{
public static void main(String[] args){
System.out.println(System.getProperty("file.encoding"));
System.out.println("测试中文是否乱码");
}
}
测试结果一:
ANSI_X3.4-1968
????????
测试结果二:
UTF-8
测试中文是否乱码
后来查资料发现,ssh 登录的时候,默认会把本地的 locale 发送到服务端,而我本地没有配置这个变量,默认值是 UTF-8,服务端也不认识,就出现了乱码。
Linux 中 sort
、uniq
等命令输出的结果,也会受到系统中 locale
配置的影响,我是在 sort 一份含有中文的文档时发现的。
可以通过以下设置解决:
LC_ALL=C sort example.txt
或者
export LC_ALL=C sort example.txt
为什么是设置 LC_ALL=C ?
1
ericFork 2021-08-13 05:18:23 +08:00
就是这样,投币鼓励一下 :P
|
2
sutra 2021-08-13 07:13:17 +08:00
加油。
|
3
todd7zhang 2021-08-13 09:32:15 +08:00
学到了
|