Bash

在 bash 中,如何轉換 Unicode 程式碼點0-9A-F0−9一種−F0-9A-F變成可列印的字元?

  • March 4, 2022

我有一個 Unicode 程式碼點列表,但我不知道將這些十六進制值轉換為它們所代表的實際字元的“簡單”方法……

我聽說zshecho -e '\u0965',但我使用bash 4.1。

對於 bash,有沒有像 zsh 方法一樣簡單的東西?

您可以將 GNU coreutils 中的 bash 的 echo 或 /bin/echo 與 iconv 結合使用:

echo -ne '\x09\x65' | iconv -f utf-16be

預設情況下,iconv 轉換為您的語言環境編碼。Perl 可能比依賴特定的 shell 或 echo 命令更便攜。我所知道的大多數 UNIX 系統都有 Perl 可用,它甚至有幾個 Windows 埠。

perl -C -e 'print chr 0x0965'

大多數時候,當我需要這樣做時,我都在使用像 Vim/GVim 這樣具有內置支持的編輯器。在插入模式下,按 Ctrl-V 後跟 u,然後鍵入四個十六進製字元。如果您想要 U+FFFF 以外的字元,請使用大寫 U 並鍵入 8 個十六進製字元。Vim 還支持自定義易於製作的鍵盤映射。它將一系列字元轉換為另一個符號。例如,我開發了一個名為 www 的鍵盤映射,它將 TM 轉換為 ™,(C) 轉換為 ©,(R) 轉換為 ®,等等。我還有一個克林貢語的鍵盤映射,以便在必要時使用。我確信 Emacs 也有類似的東西。如果您在包含 GVim 和 GNOME 終端的 GTK+ 應用程序中,您可以嘗試 Control-Shift-u 後跟 4 個十六進製字元來創建 Unicode 字元。我確信 KDE/Qt 也有類似的東西。

**更新:**從 Bash 4.2 開始,它現在似乎是一個內置功能:

echo $'\u0965'

**更新:**另外,現在 Python 範例可能比 Perl 更受歡迎。這適用於 Python 2 和 3:

python -c 'print(u"\u0965")'

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