如何使用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
相关产品推荐
相关产品推荐

