Bash
如何將 UTF-8 中的波斯數字轉換為 ASCII 中的歐洲數字?
在波斯數字中,
۰۱۲۳۴۵۶۷۸۹
相當於0123456789
在歐洲數字中。如何將波斯數字( in
UTF-8
)轉換為 ASCII?例如,我想
۲۱
成為21
。
由於它是一組固定的數字,因此您可以手動完成:
$ echo ۲۱ | LC_ALL=en_US.UTF-8 sed -e 'y/۰۱۲۳۴۵۶۷۸۹/0123456789/' 21
(或使用
tr
,但尚未使用 GNU tr)需要將您的語言環境設置為
en_US.utf8
(或更好地設置為字元集所屬的語言環境)sed
才能辨識您的字元集。與
perl
:$ echo "۲۱" | perl -CS -MUnicode::UCD=num -MUnicode::Normalize -lne 'print num(NFKD($_))' 21
對於 Python,通常有
unidecode
處理此類轉換的庫:https ://pypi.python.org/pypi/Unidecode 。在 Python 2 中:
>>> from unidecode import unidecode >>> unidecode(u"۰۱۲۳۴۵۶۷۸۹") '0123456789'
在 Python 3 中
>>> from unidecode import unidecode >>> unidecode("۰۱۲۳۴۵۶۷۸۹") '0123456789'
https://stackoverflow.com/q/8087381/2261442上的 SO 執行緒可能是相關的。
/edit:正如 Wander Nauta 在評論中指出的那樣,正如 Unidecode 頁面上所提到的,還有一個 shell 版本
unidecode
(/usr/local/bin/
如果安裝在上面pip
):$ echo '۰۱۲۳۴۵۶۷۸۹' | unidecode 0123456789