首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于英语和波斯数字的String.maketrans

用于英语和波斯数字的String.maketrans
EN

Stack Overflow用户
提问于 2012-08-09 15:56:57
回答 5查看 8.8K关注 0票数 20

我有一个这样的函数:

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()找到的。长度问题从这里开始:-(

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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'
票数 27
EN

Stack Overflow用户

发布于 2020-03-12 16:05:47

unidecode将所有字符从波斯语转换为英语,如果您只想更改以下数字:

在python3中,您可以使用此代码将任何波斯语|阿拉伯数字转换为英语数字,同时保持其他字符不变:

intab='۱۲۳۴۵۶۷۸۹۰١٢٣٤٥٦٧٨٩٠'
outtab='12345678901234567890'
translation_table = str.maketrans(intab, outtab)
output_text = input_text.translate(translation_table)
票数 7
EN

Stack Overflow用户

发布于 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"٠٩٨٧٦٥٤٣٢١")
'۰۹۸۷۶۵۴۳۲۱'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11879025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档