问题描述:
一些文件名中包含有特殊字符(乱码的字符,或者一些未知的特殊字符),现在想通过python来提取出这些“特别的”文件。
请问,有什么比较好的办法可以实现吗?
目前的思路:通过遍历文件名中的每个字符,并检查其Unicode编码值是否在汉字的范围内(换句话说:判断其是否是汉字),如果不是,就提取出来
字符串在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 中奖
"""