我有一个这样的函数:
persian_numbers = '۱۲۳۴۵۶۷۸۹۰'
english_numbers = '1234567890'
arabic_numbers = '١٢٣٤٥٦٧٨٩٠'
english_trans = string.maketrans(english_numbers, persian_numbers)
arabic_trans = string.maketrans(arabic_numbers, persian_numbers)
text.translate(english_trans)
text.translate(arabic_trans)
我希望它能把所有的阿拉伯和英语数字翻译成波斯语。但是Python说:
english_translate = string.maketrans(english_numbers, persian_numbers)
ValueError: maketrans arguments must have same length
我试图用Unicode utf-8
编码字符串,但我总是得到一些错误!有时问题出在阿拉伯字符串上!对于这项工作,你知道更好的解决方案吗?
编辑:
似乎问题出在ASCII中的Unicode字符长度。像'۱‘这样的阿拉伯数字是两个字符--这是我用ord()
找到的。长度问题从这里开始:-(
发布于 2018-04-25 21:47:42
请参阅将所有字符串转换为UTF8的unidecode库。在使用不同语言输入数字的情况下,它非常有用。
在Python 2中:
>>> from unidecode import unidecode
>>> a = unidecode(u"۰۱۲۳۴۵۶۷۸۹")
>>> a
'0123456789'
>>> unidecode(a)
'0123456789'
在Python 3中:
>>> from unidecode import unidecode
>>> a = unidecode("۰۱۲۳۴۵۶۷۸۹")
>>> a
'0123456789'
>>> unidecode(a)
'0123456789'
发布于 2020-03-12 16:05:47
unidecode
将所有字符从波斯语转换为英语,如果您只想更改以下数字:
在python3中,您可以使用此代码将任何波斯语|阿拉伯数字转换为英语数字,同时保持其他字符不变:
intab='۱۲۳۴۵۶۷۸۹۰١٢٣٤٥٦٧٨٩٠'
outtab='12345678901234567890'
translation_table = str.maketrans(intab, outtab)
output_text = input_text.translate(translation_table)
发布于 2019-06-13 04:38:45
您可以使用persiantools包:
示例:
>>> from persiantools import digits
>>> digits.en_to_fa("0987654321")
'۰۹۸۷۶۵۴۳۲۱'
>>> digits.ar_to_fa("٠٩٨٧٦٥٤٣٢١") # or digits.ar_to_fa(u"٠٩٨٧٦٥٤٣٢١")
'۰۹۸۷۶۵۴۳۲۱'
https://stackoverflow.com/questions/11879025
复制相似问题