我試圖在OSX和GNU/Linux上將十六進制值打印到unicode emojis。無法在Mac OSX上將十六進制值(emojis)打印到unicode
我曾嘗試(例如)\U1f600
,'\U1f600'
和"\U1f600"
,他們都運作良好在GNU/Linux與echo -e
命令,但在OSX不會在所有的工作,只打印原始的十六進制值回。我也試過printf
命令,但它也只能在GNU/Linux上運行。
我該如何使它在OS X上工作?
我試圖在OSX和GNU/Linux上將十六進制值打印到unicode emojis。無法在Mac OSX上將十六進制值(emojis)打印到unicode
我曾嘗試(例如)\U1f600
,'\U1f600'
和"\U1f600"
,他們都運作良好在GNU/Linux與echo -e
命令,但在OSX不會在所有的工作,只打印原始的十六進制值回。我也試過printf
命令,但它也只能在GNU/Linux上運行。
我該如何使它在OS X上工作?
安裝新bash
。 :)
OSX中的默認bash是陳舊的3.2.57(1)-release
。這是因爲在4.0中將bash
的許可證從GPL v2
更改爲GPL v3
,所以Apple無法將其包含到他的OS分區中。
E.g.使用使用的bash從macports.org
$ echo $BASH_VERSION
4.4.12(1)-release
$ echo -e '\U1f600'
$ printf "%b\n" "\U1f600"
編輯默認/bin/bash
$ echo $BASH_VERSION
3.2.57(1)-release
$ echo -e '\U1f600'
\U1f600
$ printf "%b\n" "\U1f600"
\U1f600
: 你可以使用Perl:
perl -CO -E 'say chr 0x1f600'
#or
perl -CO -E 'say pack 'U', 0x1f600'
#or
perl -CO -E 'say "\N{U+1F600}"'
所有打印
EDIT2:
emo="\N{U+1F604}"
perl -CO -E "say qq{$emo}" #use double quotes, but isn't a good practice
更好,這將直接接受你\u
序列......
perl -CO -plE 's/\\u(\p{Hex}+)/chr(hex($1))/xieg' <<< "your string"
如:
emo='some \U1f600 and another \U1f608 here'
perl -CO -pE 's/\\u(\p{Hex}+)/chr(hex($1))/xieg' <<< "$emo"
打印
some and another here
的函數的chr_utf8_m
在Greg's Wiki: Wooledge.org BashFAQ N 071工作自bash 3.1
它執行手動utf8編碼。
你最好看看那裏,因爲完整的腳本很長。
一個簡單的版本,所以你得到的功能懸掛是:
#!/bin/bash
chr() {
local val
[ "$1" -lt 256 ] || return 1
printf -v val %o "$1"; printf "\\$val"
# That one requires bash 3.1 or above.
}
ord() {
# POSIX
LC_CTYPE=C printf %d "'$1"
}
# examples:
chr "$(ord A)" # -> A
ord "$(chr 65)" # -> 65
謝謝您的回答,有沒有一種方法,使之與「古老」的版本工作? – Grender
好吧,我正在做'perl -CO -E'在bash腳本里面說'$ emojified',但它沒有顯示任何東西。 (從$ values [0] =「\ N {U + 1f600}」中獲得$ emojified的值,我認爲這個問題依賴於''''的需要,你能幫我嗎?我也試過轉義' 「'like like:'values [0] =」\「\ N {U + 1f600} \」「' – Grender
@Grender增加了一些例子 – jm666