遇到一个有趣的 ssh 的问题

2021-08-12 23:53:48 +08:00
 codingbody

今天使用的 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,服务端也不认识,就出现了乱码。

1480 次点击
所在节点    SSH
3 条回复
ericFork
2021-08-13 05:18:23 +08:00
就是这样,投币鼓励一下 :P
sutra
2021-08-13 07:13:17 +08:00
加油。
todd7zhang
2021-08-13 09:32:15 +08:00
学到了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/795457

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX