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

如何使用Python实现日文字体样式字符到英文字体样式的转换

Python实现日文全角字符到半角英数字符转换

你读取到的939-2367类字符属于日文编码体系下的全角英数、全角符号,和常规半角英数字符的本质差异是Unicode码位不同,并非单纯字体显示差异,可通过码位映射完成转换。

转换核心逻辑

  • 常规可转换全角字符的Unicode区间为U+FF01 ~ U+FF5E,对应半角ASCII字符区间为U+0021 ~ U+007E,两类字符码位固定差值为65248
  • 全角空格(U+3000)不在上述区间内,需单独映射为半角空格(U+0020)
  • 示例中的全角连字符-(U+FF0D)刚好在可转换区间内,可直接映射为半角连字符-(U+002D)

自定义转换实现

自定义码位转换的方式可控性最高,不会误改其他需要保留的日文字符:

def fullwidth_to_halfwidth(input_str: str) -> str:
    output = []
    for c in input_str:
        code = ord(c)
        # 单独处理全角空格
        if code == 0x3000:
            code = 0x0020
        # 处理区间内全角字符
        elif 0xFF01 <= code <= 0xFF5E:
            code -= 0xFEE0  # 即减去固定差值65248
        output.append(chr(code))
    return ''.join(output)


# 调用示例
raw = "939-2367"
result = fullwidth_to_halfwidth(raw)
print(result)  # 输出结果:939-2367

标准库快速实现

如果不需要严格控制转换范围,可直接使用Python标准库unicodedata的兼容标准化方法,代码更简洁:

import unicodedata

def fullwidth_to_halfwidth_std(input_str: str) -> str:
    # NFKC标准化会自动将全角兼容字符映射为对应常规半角字符
    return unicodedata.normalize("NFKC", input_str)

注意:NFKC标准化会同步转换全角片假名、特殊连体字等其他兼容类字符,如果文本中包含需要保留原格式的日文内容,不建议使用该方案,避免非预期的内容修改。

效果验证

  • 转换前:939-2367 每个字符占2个半角字符宽度,属于全角字符集,和常规英数显示样式不一致
  • 转换后:939-2367 为标准ASCII半角字符,和本地常规英数字符显示效果完全一致

内容的提问来源于stack exchange,提问作者Sunn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:54:32