事情的经过如下(手机发的格式略乱):
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
然后重新 ssh 连接服务器重新启动 jar 包,文件读取失败的问题就消失了,jinfo 查看字符集也变成 UTF-8 了。
问题找到了,最好的解决办法就是启动的时候自己手动指定字符集。但是我还是没想明白,为什么启动的时候读取的是我 ssh 客户端的环境变量配置,而不是我的服务器本机配置呢?
1
hsuyeung OP 至于为什么会出现 ansi_x3.4-1968 这个字符集,当时网上搜了一圈就是因为读取不到字符集的环境变量时就会默认用这个。我用家里的新电脑把之前配置的字符集环境变量删掉之后,执行 locale charmap 命令,确实打印出来就是 ansi_x3.4-1968
|
2
cnhongwei 2023-08-31 22:14:18 +08:00 1
linux 是进程继承父进程的环境。你使用 shell 启动,当然会使用你当前 shell 的字符集。你可以设置 shell 的字符集,也可以使用服务的方式启动,也可以在启动命令中强制设置字符集。
|
4
qfdk 2023-09-01 10:25:56 +08:00 via iPhone
其实也可以加到.bashrc 里面
|
5
hsuyeung OP @qfdk 是的,这个我在家里电脑上已经配置了。主要是当时不理解为什么启动的时候使用的是我 ssh 客户端的环境变量而不是服务器本机的
|
6
julyclyde 2023-09-01 18:07:27 +08:00
ssh 客户端会 SendEnv ;而 sshd 那边会 AcceptEnv
所以就影响了在其中运行的进程了 你能认识到“最好的解决办法就是启动的时候自己手动”已经超过了绝大多数 javaer 了 |