鍍金池/ 問答/Python/ python 如何判斷字符串中是否包含亂碼

python 如何判斷字符串中是否包含亂碼

python 如何判斷是否有中文亂碼。
類似:
楀鉤鏃惰鐪熷涔狅纴鍒昏嫤閽葷爺鎶?湳錛屾墡瀹炲伐浣滐纴瑙勮寖綆$悊銆備漢鎬寲鐨勭鐞嗗嚌镵氫簡涓?鎵規(guī)妧鏈騫詫纴寰楀埌浜嗗叏鍏徃鍛樺伐鐨勪俊璧栥?鍛樺伐100%鍙傚姞鍖諱繚錛?5钖嶅憳宸弬鍔犲煄淇濓纴澶栨潵鍛樺伐鎻愪緵椋熷錛屾椂鏃跺埢鍒諱互鍏變駭鍏氬憳鐨勬爣鍑嗚 閲忚嚜宸憋纴鍦濂戒紒涓氱殑钖屾椂錛屼負紺句細浜嬩笟鎹愯祫鍔10涓囧厓錛屾崘璧犺傳鍥板憳宸灞炴不鐥?涓囧厓錛屽府鍔傳鍥板鐢?.6涓囧厓錛屾崘璧犳枃鏋椾腑瀛紳鏈鴻澶?涓囧厓錛屾厛锽勬崘鐚?涓囧厓銆?/p> 鍛拰鍏村悓蹇楀浜嬩笟鎵憲榪芥眰錛屽湪榪欏崄鍑犲勾浼佷笟鍙戝睍榪囩涓纴鍏呭垎鍙戞尌浜嗕竴涓叡浜厷鍛樼殑鍏堥攱妯寖甯浣滅敤錛屽彈鍒頒簡闀囨斂搴溿?甯傜駭涓葷閮桊鐨勮褰幫纴紺句細钖勭晫鐨勪竴鑷村璇勶纴浠栧潥淇彧鏈変笉鏂彂灞曪

回答
編輯回答
夢囈

將它unicode編碼后,再轉(zhuǎn)gb2312,如果報錯就說明存在生僻字。詳情參考https://jingsam.github.io/201...

2018年5月25日 01:17
編輯回答
你好胸

采用分詞的方法也不錯, 亂碼是不太可能成詞的(但有生僻字不一定是亂碼).
參考我下面的代碼:

# encoding=utf-8
import jieba

def new_len(iterable):
    try:
      return iterable.__len__()
    except AttributeError:
      return sum(1 for _ in iterable)


normal_str="我來到北京清華大學"
normal_len=len(normal_str)
seg_list = jieba.cut(normal_str)

res = "正常文本:"+str(normal_len / new_len(seg_list))

print(res)

luanma_str = "楀鉤鏃惰鐪熷涔狅纴鍒昏嫤閽葷爺鎶?湳錛屾墡瀹炲伐浣滐纴瑙勮寖綆$悊銆備漢鎬寲鐨勭鐞嗗嚌镵氫簡涓?鎵規(guī)妧鏈騫詫纴寰楀埌浜嗗叏鍏徃鍛樺伐鐨勪俊璧栥?鍛樺伐100%鍙傚姞鍖諱繚錛?5钖嶅憳宸弬鍔犲煄淇濓纴澶栨潵鍛樺伐鎻愪緵椋熷錛屾椂鏃跺埢鍒諱互鍏變駭鍏氬憳鐨勬爣鍑嗚 閲忚嚜宸憋纴鍦濂戒紒涓氱殑钖屾椂錛屼負紺句細浜嬩笟鎹愯祫鍔10涓囧厓錛屾崘璧犺傳鍥板憳宸灞炴不鐥?涓囧厓錛屽府鍔傳鍥板鐢?.6涓囧厓錛屾崘璧犳枃鏋椾腑瀛紳鏈鴻澶?涓囧厓錛屾厛锽勬崘鐚?涓囧厓銆?/p> 鍛拰鍏村悓蹇楀浜嬩笟鎵憲榪芥眰錛屽湪榪欏崄鍑犲勾浼佷笟鍙戝睍榪囩涓纴鍏呭垎鍙戞尌浜嗕竴涓叡浜厷鍛樼殑鍏堥攱妯寖甯浣滅敤錛屽彈鍒頒簡闀囨斂搴溿?甯傜駭涓葷閮桊鐨勮褰幫纴紺句細钖勭晫鐨勪竴鑷村璇勶纴浠栧潥淇彧鏈変笉鏂彂灞曪"
luanma_len = len(luanma_str)
luanma = jieba.cut(luanma_str)


res = "亂碼:"+str(luanma_len / new_len(luanma))
print(res)

輸出結果

正常文本:2.25
亂碼:1.0590062111801242

正常結果一般在2以上, 亂碼非常接近1, 可以認為1.2以下就一定是亂碼了.
也可轉(zhuǎn)成概率公式.
設為1時概率為0.9, 2時概率為0.1,可得下面的公式
$$ P = {1 \over 1 + \exp{(4.395*x-6.594)}} $$

式中:
x--為字符串長度與分詞數(shù)組長度的比值
P--為概率.

這個方法引入了結巴分詞模塊
需要提前安裝

pip3 install jieba

參見:
https://github.com/fxsjy/jieba

2018年2月22日 02:21