Bash

將 UTF8 字元轉換為斜線轉義的數值

  • November 23, 2020

我的系統語言不是日語,但我的使用者語言/編碼是。“直接”在終端仿真器中使用 shell 可以正常工作,但“幕後”的東西似乎不行。

保存 = Save for example.

當我“直接”使用 X 東西時,這會正確顯示(例如,我打開終端仿真器或 GUI 程序並直接弄亂它)但是在後台執行東西(使用 dmenu,在 xmonad WM 中)結果是什麼輸入腳本不是我可以比較的字元串,而是這樣的:

保存...

變成

'\344\277\235\345\255\230...'

我如何自己生成這個?我只是通過將複製粘貼內容放入腳本中來從中獲得轉義的值字元串。

我可以做一個預傳遞,將這樣一個轉義值字元串轉換為一個“正確”的字元串,然後再進行大小寫匹配。

我只想自己生成這樣一個轉義值字元串,而不需要迂迴黑客。

使用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

引用自:https://unix.stackexchange.com/questions/621136