Python中如何将英文数字转换为波斯/阿拉伯数字 含Unicode手机号转换方法
Python实现英文数字手机号转波斯/阿拉伯数字(基于Unicode编码)
实现原理
不同语系的数字在Unicode中是按组连续排列的,同语义的数字偏移量固定:
- 英文数字
0-9:Unicode编码范围U+0030~U+0039,对应十进制ord('0')=48到ord('9')=57 - 波斯数字
۰-۹:Unicode编码范围U+06F0~U+06F9,和同数值英文数字的固定偏移量为1728 - 阿拉伯数字
٠-٩:Unicode编码范围U+0660~U+0669,和同数值英文数字的固定偏移量为1584
转换时仅对数字字符做编码偏移处理,手机号里的+、空格、分隔符等非数字字符直接保留即可。
代码实现
通用转换函数
def en_digit_to_target(phone_str: str, target: str = "persian") -> str: res = [] # 确定目标数字的偏移量 if target == "persian": offset = 1728 elif target == "arabic": offset = 1584 else: raise ValueError("target仅支持persian(波斯数字)、arabic(阿拉伯数字)") for char in phone_str: # 仅转换英文数字字符 if char.isdigit() and 48 <= ord(char) <= 57: res.append(chr(ord(char) + offset)) else: res.append(char) return "".join(res)
测试示例(使用提供的手机号)
test_phone = "+1 9956755308" # 转波斯数字 persian_phone = en_digit_to_target(test_phone, target="persian") print(persian_phone) # 输出:+۱ ۹۹۵۶۷۵۵۳۰۸ # 转阿拉伯数字 arabic_phone = en_digit_to_target(test_phone, target="arabic") print(arabic_phone) # 输出:+١ ٩٩٥٦٧٥٥٣٠٨
其他说明
如果需要做反向转换(波斯/阿拉伯数字转回英文数字),只需要判断字符属于对应数字范围后,减去对应偏移量即可。
内容的提问来源于stack exchange,提问作者Jestin M Wilson
相关产品推荐
相关产品推荐

