背景
工作中經(jīng)常有些功能限制了只能輸入英文字符串坝辫,但是客戶或者銷售同事的文案來(lái)源比較多蔚出,有些是直接復(fù)制的其它渠道或者平臺(tái),會(huì)存在一些肉眼根本看不來(lái)的異常字符箩做,如果內(nèi)容較長(zhǎng)莽红,定位和查找就比較麻煩了。
因此結(jié)合之前幫助同事處理過(guò)的異常字符串,寫了個(gè)處理腳本安吁,方便后續(xù)同類問(wèn)題的處理醉蚁。
使用效果
通過(guò)上述運(yùn)行輸出可以看到,字符中包含
NBSP
空格鬼店,這個(gè)大部分的輸入框會(huì)提示輸入非法网棍,但是肉眼很難發(fā)現(xiàn),由于NBSP
一般是來(lái)源于網(wǎng)頁(yè)文本的復(fù)制粘貼妇智,不影響文本釋意滥玷,這里我直接用英文空格進(jìn)行替換。
存在異澄±猓空格, 執(zhí)行替換處理惑畴!
其它的標(biāo)點(diǎn)符號(hào),其實(shí)也是存在中文和英文長(zhǎng)的很像的情況航徙。但改了可能會(huì)影響文本的意思桨菜,這部分字符我們不直接替換,而是顯示其所在位置捉偏,讓人工可以快速定位到倒得,來(lái)進(jìn)行合理處理。
檢測(cè)數(shù)據(jù): Ni Digger這 Producto~ Eléct·rico ¥y Electrónico Douchekop, Doucheslang, Handdouche Constru??o & Decora??o コンピュータ ??? 製品 ??????? ????????
異常字符: 這 ~ é · ¥ ó ?? ?? コンピュータ ??? 製品 ??????? ????????
最后處理完異常字符的每行數(shù)據(jù)夭禽,存到一個(gè)數(shù)組里霞掺,逐行輸出,方便人工進(jìn)行再次使用讹躯。
整形后的全部數(shù)據(jù):
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("檢測(cè)數(shù)據(jù):",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("存在異称斜颍空格, 執(zhí)行替換處理!")
new_data.append(str)
loop_string(str)
print("==" * 50)
print("整形后的全部數(shù)據(jù):")
for n in new_data:
print(n)
if __name__ == '__main__':
data = [
"要檢測(cè)的字符串"
]
format_data(data)
把文本粘貼到 要檢測(cè)的字符串
里運(yùn)行即可潮梯,如果有多個(gè)字符串骗灶,挨個(gè)往數(shù)組貼就可以了。