我最近更经常地使用unicode,想知道是否有一个命令行工具可以在unicode的形式之间转换。要是能说一句就好了:
uni_convert "☃" --string
并且知道该字符串在Unicode中被定义为“SNOWMAN”。
8hhllhi21#
Perl的Unicode-Tussle发行版附带了有用的uniprops。
uniprops
$ uniprops '☃' U+2603 ‹☃› \N{SNOWMAN} ... $ uniprops 'U+2603' U+2603 ‹☃› \N{SNOWMAN} ... $ uniprops 'SNOWMAN' U+2603 ‹☃› \N{SNOWMAN} ...
如果您正在编写代码,则需要charnames。| 需要|拥有|编码|| - -|- -|- -|| $code| $char| ord($char)|| $code| $name| charnames::vianame($name)|| $char| $code| chr($code)|| $char| $name个|chr(charnames::vianame($name))|| $name| $code| x1米15英寸|| $name个|$char| charnames::viacode(ord($char))|vianame接受正式别名(例如LINEFEED的LF)。如果要接受它,您需要自己解析U+表示法。($code = hex(s/^U\+//r);)示例:第一次其他资源:
$code
$char
ord($char)
$name
charnames::vianame($name)
chr($code)
chr(charnames::vianame($name))
charnames::viacode(ord($char))
vianame
LINEFEED
LF
U+
$code = hex(s/^U\+//r);
提供对Unicode Character Database中的信息的访问。
unichars
unichars '\p{Hiragana}'
uujelgoq2#
这里有一个awk可以做到这一点。从www.example.com下载this fileunicode.org,该网站提供最新的名称。然后道:
q=$(printf '%x\n' \'☃) awk '/^[[:xdigit:]]+/{ str=$0 sub(/^[[:xdigit:]]+[[:blank:]]+/,"",str) names[$1]=str } END{ print names[q] } ' q="$q" names.txt
印刷品:
SNOWMAN
如果你想走另一条路:
cp=$(awk '/^[[:xdigit:]]+/{ str=$0 sub(/^[[:xdigit:]]+[[:blank:]]+/,"",str) other_names[str]=$1 } END{ print other_names[q] } ' q="SNOWMAN" names.txt) echo -e "\u${cp}"
☃
如果你有GNU awk,你可以很容易地将十六进制索引转换成十进制,并且可以从内部打印。这允许使用单个源文件,并通过定义q或r来进行一种或另一种方式:
q
r
gawk '/^[[:xdigit:]]+/{ str=$0 sub(/^[[:xdigit:]]+[[:blank:]]+/,"",str) names[$1]=str other_names[str]=$1 } END{ print q ? names[q] : sprintf("%c", strtonum("0x" other_names[r])) } ' r='SNOWMAN' names.txt ☃ gawk '/^[[:xdigit:]]+/{ str=$0 sub(/^[[:xdigit:]]+[[:blank:]]+/,"",str) names[$1]=str other_names[str]=$1 } END{ print q ? names[q] : sprintf("%c", strtonum("0x" other_names[r])) } ' q=$(printf '%x\n' \'☃) names.txt SNOWMAN
q3qa4bjr3#
我将代码分离到一个文件中并创建了一个repo:https://github.com/poti1/uni_convert
3条答案
按热度按时间8hhllhi21#
Perl的Unicode-Tussle发行版附带了有用的
uniprops
。如果您正在编写代码,则需要charnames。
| 需要|拥有|编码|
| - -|- -|- -|
|
$code
|$char
|ord($char)
||
$code
|$name
|charnames::vianame($name)
||
$char
|$code
|chr($code)
||
$char
|$name
个|chr(charnames::vianame($name))
||
$name
|$code
| x1米15英寸||
$name
个|$char
|charnames::viacode(ord($char))
|vianame
接受正式别名(例如LINEFEED
的LF
)。如果要接受它,您需要自己解析U+
表示法。($code = hex(s/^U\+//r);
)示例:
第一次
其他资源:
提供对Unicode Character Database中的信息的访问。
unichars
(例如unichars '\p{Hiragana}'
)uujelgoq2#
这里有一个awk可以做到这一点。
从www.example.com下载this fileunicode.org,该网站提供最新的名称。
然后道:
印刷品:
如果你想走另一条路:
印刷品:
如果你有GNU awk,你可以很容易地将十六进制索引转换成十进制,并且可以从内部打印。这允许使用单个源文件,并通过定义
q
或r
来进行一种或另一种方式:q3qa4bjr3#
我将代码分离到一个文件中并创建了一个repo:https://github.com/poti1/uni_convert