You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:36:05