Bash
將 UTF8 字元轉換為斜線轉義的數值
我的系統語言不是日語,但我的使用者語言/編碼是。“直接”在終端仿真器中使用 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