今天使用的 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,服务端也不认识,就出现了乱码。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.