我的系统语言不是日语,但我的用户语言/编码是。在终端模拟器中“直接”使用 shell 东西可以正常工作,但“在幕后”的东西似乎不行。
保存 = Save for example.
当我“直接”使用 X 东西时(例如,我打开一个终端模拟器或 GUI 程序并直接弄乱它),它会正确显示,但是在后台运行东西(使用 dmenu,在 xmonad WM 中),结果是什么被输入到脚本中的内容不是我可以进行字符串比较的内容,而是类似这样的内容:
保存...
变成
'\344\277\235\345\255\230...'
我如何自己生成这个?我只是通过将复制粘贴内容放入脚本中来获得转义值字符串。
我很乐意做一个预传递,将这样的转义值字符串转换为“正确的”字符串,然后稍后进行大小写匹配。
我只是想自己生成这样一个转义值字符串,而不需要迂回黑客。
答案1
有了zsh
外壳,有了:
string="保存 = Save for example.
Also including newlines,
'quotes and \backslashes"
() {
local LC_ALL=C
quoted=${${(qqqq)1}#'$'}
} "$string"
printf '%s\n' $quoted
给出:
'\344\277\235\345\255\230 = Save for example.\nAlso including newlines,\n\'quotes and \\backslashes'
如果您只想转换超过 0x80 的字节\ooo
:
printf %s "$string" |
perl -l -0777 -pe 's/[\x80-\xff]/sprintf "\\%o", ord$&/ge'
会给出(来自任何类似 Bourne 的 shell):
\344\277\235\345\255\230 = Save for example.
Also including newlines,
'quotes and \backslashes