ペルシャ数字はヨーロッパ数字۰۱۲۳۴۵۶۷۸۹
と同じです0123456789
。
UTF-8
ペルシャ語の数字(in)をASCIIに変換するには?
たとえば、私はなりたい۲۱
です21
。
答え1
固定数字のセットなので、手動で実行できます。
$ 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
答え2
unidecode
Pythonの場合、通常、これらの変換を処理するライブラリがあります。https://pypi.python.org/pypi/Unidecode。
Python 2では:
>>> from unidecode import unidecode
>>> unidecode(u"۰۱۲۳۴۵۶۷۸۹")
'0123456789'
Python 3では:
>>> from unidecode import unidecode
>>> unidecode("۰۱۲۳۴۵۶۷۸۹")
'0123456789'
SOスレッドは次の場所にあります。https://stackoverflow.com/q/8087381/2261442関連があるかもしれません。
/編集:Wander Nautaがコメントで指摘し、Unicodeページで述べたように、シェルバージョンもありますunidecode
(/usr/local/bin/
以下にインストールされている場合pip
)。
$ echo '۰۱۲۳۴۵۶۷۸۹' | unidecode
0123456789
答え3
純粋なbashバージョン:
#!/bin/bash
number="$1"
number=${number//۱/1}
number=${number//۲/2}
number=${number//۳/3}
number=${number//۴/4}
number=${number//۵/5}
number=${number//۶/6}
number=${number//۷/7}
number=${number//۸/8}
number=${number//۹/9}
number=${number//۰/0}
echo "Result is $number"
私はGentooコンピュータでテストしましたが、うまくいきます。
./convert ۱۳۲
Result is 132
変換する文字のリスト(0から9まで)が与えられると、ループとして実行されます。
#!/bin/bash
conv() ( LC_ALL=en_US.UTF-8
local n="$2"
for ((i=0;i<${#1};i++)); do
n=${n//"${1:i:1}"/"$i"}
done
printf '%s\n' "$n"
)
conv "۰۱۲۳۴۵۶۷۸۹" "$1"
次のように使用されます。
$ convert ۱۳۲
132
別の(やや深刻な)使用方法は次のとおりですgrep
。
#!/bin/bash
nums=$(echo "$1" | grep -o .)
result=()
for i in $nums
do
case $i in
۱)
result+=1
;;
۲)
result+=2
;;
۳)
result+=3
;;
۴)
result+=4
;;
۵)
result+=5
;;
۶)
result+=6
;;
۷)
result+=7
;;
۸)
result+=8
;;
۹)
result+=9
;;
۰)
result+=0
;;
esac
done
echo "Result is $result"
答え4
iconv
この問題を理解できないようですので、次の呼び出しポートはこのtr
ユーティリティを使用することです。
$ echo "۲۱" | tr '۰۱۲۳۴۵۶۷۸۹' '0123456789'
21
tr
ある文字セットを別の文字セットに変換するので、ペルシャ数字セットをラテン数字セットに変換するように指示します。
編集する:@cuonglmユーザーが指摘したとおりです。これを行うには、Macのtr
ようにGNU以外である必要があり、に設定する必要があります。tr
$LC_CTYPE
en_US.UTF-8