Bash

如何將 UTF-8 中的波斯數字轉換為 ASCII 中的歐洲數字?

  • October 20, 2020

在波斯數字中,۰۱۲۳۴۵۶۷۸۹相當於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

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