Python:过滤一些特殊字符

 卢启红 发布于 2022-11-03 01:49

问题描述:

一些文件名中包含有特殊字符(乱码的字符,或者一些未知的特殊字符),现在想通过python来提取出这些“特别的”文件。
请问,有什么比较好的办法可以实现吗?


目前的思路:通过遍历文件名中的每个字符,并检查其Unicode编码值是否在汉字的范围内(换句话说:判断其是否是汉字),如果不是,就提取出来

2 个回答
  • 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

    针对这里的问题,我们可以先将文件名解码成unicode,然后用gbk编码,如果抛出异常,说明编码失败,即文件名中存在特殊字符。下面是一个小例子:

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    
    file_names = ["œ®特殊字符.txt",
                  "没有特殊字符.txt",
                  "ßååå.txt"
                  ]
    for file_name in file_names:
        try:
            file_name.decode("utf-8").encode("gbk")
            print file_name, "..."
        except UnicodeEncodeError:
            print file_name, "中奖"
    
    """outputs:
    œ®特殊字符.txt 中奖
    没有特殊字符.txt ...
    ßååå.txt 中奖
    """
    
    2022-11-05 10:49 回答
  • 你自己先要确定“乱码”的定义,例如韩文(unicode),如果你装了韩文字体,那是可以显示的,不是乱码,但没装的话就是问号一堆,如果是韩文(euc-kr),在汉字系统那只是一堆无语义的汉字……可能这个举例扯远了,你觉得不会有这种情况,但我只是提醒一下会有意料之外的情况

    所以,你需要一个白名单,把你允许的字符unicode范围都列出来,因为肯定不止汉字,像你列出的文件名中就有空格
    另外,没必要逐个字符检查,直接用re.sub去除白名单外的字符就可以了

    2022-11-05 10:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有