背景
工作中经常有些功能限制了只能输入英文字符串,但是客户或者销售同事的文案来源比较多,有些是直接复制的其它渠道或者平台,会存在一些肉眼根本看不来的异常字符,如果内容较长,定位和查找就比较麻烦了。
因此结合之前帮助同事处理过的异常字符串,写了个处理脚本,方便后续同类问题的处理。
使用效果
通过上述运行输出可以看到,字符中包含
NBSP
空格,这个大部分的输入框会提示输入非法,但是肉眼很难发现,由于NBSP
一般是来源于网页文本的复制粘贴,不影响文本释意,这里我直接用英文空格进行替换。
存在异常空格, 执行替换处理!
其它的标点符号,其实也是存在中文和英文长的很像的情况。但改了可能会影响文本的意思,这部分字符我们不直接替换,而是显示其所在位置,让人工可以快速定位到,来进行合理处理。
检测数据: Ni Digger这 Producto~ Eléct·rico ¥y Electrónico Douchekop, Doucheslang, Handdouche Construção & Decoração コンピュータ 서비스 製品 الأدوات والأجهزة
异常字符: 这 ~ é · ¥ ó çã çã コンピュータ 서비스 製品 الأدوات والأجهزة
最后处理完异常字符的每行数据,存到一个数组里,逐行输出,方便人工进行再次使用。
整形后的全部数据:
Ni Digger这 Producto~ Eléct·rico ¥y Electrónico Douchekop, Doucheslang, Handdouche Construção & Decoração コンピュータ 서비스 製品 الأدوات والأجهزة
完整代码
def isEnglish(s):
return s.isascii()
def loop_string(str):
ascii_strs = []
hasAscii = False
print("检测数据:",str)
for s in str:
if not isEnglish(s):
ascii_strs.append(s)
hasAscii = True
else:
ascii_strs.append(" ")
if hasAscii:
print("异常字符:","".join(ascii_strs))
def format_data(data):
print("==" * 50)
new_data = []
for str in data:
if u'\xa0' in str:
str = str.replace(u'\xa0', u' ')
print("存在异常空格, 执行替换处理!")
new_data.append(str)
loop_string(str)
print("==" * 50)
print("整形后的全部数据:")
for n in new_data:
print(n)
if __name__ == '__main__':
data = [
"要检测的字符串"
]
format_data(data)
把文本粘贴到 要检测的字符串
里运行即可,如果有多个字符串,挨个往数组贴就可以了。