文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

用Python转换一些常见全角字符为半

2023-01-31 08:19

关注

前言

最近在爬日文小说的过程中,经常遇到全角(甚至和和半角混用),造成我(强迫症)强烈不适,就着手专门写一个脚本处理之

思路

首先在网上寻找看是否已经有现成库/脚本能做到,寻找一番之后只找到一些思路文章,这里就不重复了
有一点要注意,不少文章里是python2的情况,里面用的是unichr函数,到python3就变成了chr函数
直接看代码吧

def SBC2DBC(char):
    chr_code = ord(char)
    # 处理全角中数字大等于10的情况
    if chr_code in range(9312, 9332):
        return str(chr_code - 9311)
    elif chr_code in range(9332, 9352):
        return str(chr_code - 9331)
    elif chr_code in range(9352, 9372):
        return str(chr_code - 9351)
    elif chr_code in range(8544, 8556):
        return str(chr_code - 8543)

    else:
        if chr_code == 12288: # 全角空格,同0x3000
            chr_code = 32
        if chr_code == 8216 or chr_code == 8217:  # ‘’
            chr_code = 39 # '
        elif chr_code in range(65281, 65374):
            chr_code = chr_code - 65248
        return chr(chr_code)


def SBC2DBC_string(string):
    new_string = ''
    for char in string:
        new_string += SBC2DBC(char)
    return new_string

网上大部分文章里只有全角空格和range(65281,65374)的情况,我时不时能遇到一些比较奇怪的全角数字,比如⑩ ⑽ ⒑ Ⅻ,这里也一并处理了

扩展思考

1 . 某些情况下全角反而是更好的选择,比如文件名,其不能用*:/等符号,全角就更适合,当然这属于另一个话题,就不在此展开
2 . 罗马数字的情况,在现有的全角字符中罗马数字仅到12,如果某位(丧心病狂的)作者用了多个罗马数字的话,比如ⅩⅤ,上面的脚本就不合适了(就转成105),这时候需要先对整个字符串进行处理,找到连接在一起的罗马数字,然后计算并替换,这更像是数据清洗的范畴,也不展开多说了

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯