python检测字符串中是否有生僻字
最近工作中遇到远古老版本产品中生僻字会显示乱码问题,需要实现检测字段是否包含生僻字以及一些非法字符如 ~!@#$%^&*
首先使用 python 匹配非法字符,可以用 re 函数库实现。
pattern = re.compile(r"[~!@#$%^&* ]")
常见生僻字 翀珪屌囧
对于生僻字的定义,经询问同事应该是非 GB2312 的汉字为生僻字,只需要匹配 GB2312 字符。
可以使用 unicode_string.encode('GB2312')
转换字符串,如果抛出 UnicodeEncodeError 异常则有生僻字。
完整代码如下:
def is_rare_name(str):
pattern = re.compile(r"[~!@#$%^&* ]")
match = pattern.search(str)
if match:
print(match.group())
return True
try:
str.encode("gb2312")
except UnicodeEncodeError:
return True
return False