我有一个 Unicode 代码点列表,但我不知道将这些十六进制值转换为它们代表的实际字符的“简单”方法......
我听说zsh有echo -e '\u0965'
,但我使用bash 4.1。
对于 bash,有没有像 zsh 方法一样简单的东西?
pen*_*359 19
您可以将 GNU coreutils 的 bash 的 echo 或 /bin/echo 与 iconv 结合使用:
echo -ne '\x09\x65' | iconv -f utf-16be
Run Code Online (Sandbox Code Playgroud)
默认情况下 iconv 转换为您的语言环境编码。也许比依赖特定的 shell 或 echo 命令更便携的是 Perl。我所知道的大多数 UNIX 系统都有 Perl 可用,甚至有几个 Windows 端口。
perl -C -e 'print chr 0x0965'
Run Code Online (Sandbox Code Playgroud)
大多数时候,当我需要这样做时,我会使用像 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'
Run Code Online (Sandbox Code Playgroud)
更新:此外,现在 Python 示例可能比 Perl 更受欢迎。这适用于 Python 2 和 3:
python -c 'print(u"\u0965")'
Run Code Online (Sandbox Code Playgroud)
Lri*_*Lri 13
巴什4.2(2011年发布)补充支持echo -e '\u0965'
,printf '\u0965'
,printf %b '\u0965'
和echo $'\u0965'
同样的工作。
http://tiswww.case.edu/php/chet/bash/FAQ:
Run Code Online (Sandbox Code Playgroud)o $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.
如果您有 GNU coreutils,请尝试printf
:
$ printf '\u0965\n'
?
Run Code Online (Sandbox Code Playgroud)
echo
如果您的控制台使用 UTF-8 并且您具有 UTF-8 编码,则可以完成这项工作:
$ echo -e '\xE0\xA5\xA5'
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到 Unicode 到 UTF-8 十六进制编码的表格:http : //www.utf8-chartable.de/。您可以使用多种脚本语言将 Unicode 代码点转换为十六进制。下面是一个使用 python 的例子:
python -c "print(unichr(int('0965', 16)).encode('utf-8').encode('hex'))"
Run Code Online (Sandbox Code Playgroud)
下面是一个 Perl 脚本,它将参数转换为正确的十六进制值(这里有许多不必要的括号):
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Encode;
foreach (@ARGV) {
say unpack('H*', encode('utf8', chr(hex($_))))
}
Run Code Online (Sandbox Code Playgroud)
例如,
./uni2utf 0965
e0a5a5
Run Code Online (Sandbox Code Playgroud)
当然,如果你有 Perl 或 Python,你也可以使用它们来打印字符。