在 SSH 上运行时,R 似乎会根据 SSH 客户端的操作系统以不同的方式处理非 ASCII 字符。
例如,如果我使用运行 macOS(14.6.1)的计算机在 Ubuntu 机器(22.04.5)上启动 R 会话,并运行:
units::set_units(12.7, "\U00B5m")
我得到:
12.7 [µm]
但是,在同一台服务器上运行相同的表达式,但由 Windows 客户端(10.0.19045.4170)运行,结果如下:
Error: In '<U+00B5>m', '<U+00B5>m' is not recognized by udunits.
我认为这可能与每个操作系统上的命令行如何通过 SSH 发送字符表示有关。但是,如果我在服务器上保存以下脚本(使用 macOS 计算机上的 SSH 上的 vim 编写):
#!/bin/Rscript
print(nchar("µm"))
并从 macOS 客户端(例如ssh <user>@<host> "./print_micron.R"
)通过 SSH 执行它,我得到:
[1] 2
ie"µ"
是一个双字节字符。但如果我从 Windows 客户端执行它,我会得到:
[1] 3
即"µ"
变成两个独立的字符,每个字节一个。
这挑战了我对 SSH 上命令执行方式的直觉,因为我认为 R 的行为完全由服务器决定。为什么客户端操作系统会影响 R 表示非 ASCII 字符的方式?