pythonのchardetでWindows-1254とか誤検出するときはuniversaldetectorではなく素のdetectを使う
なにがおきた
NetscapeNavigator4.xの頃から長年育て上げてきたサイトのhtmlやらcssやらjsやらを舐めたおすプログラムを書いてたんだが、Shift_JISのファイルのオープンに失敗することがある。
なにがおきてる
chardetのuniversaldetectorを使ってたんだが、文字コードの検出に失敗している模様。
なにをした
スピードとか必要ないローカル用のプログラムなのでuniversaldetectorじゃなくてchardet.detectを使うようにした。
detect.py
import chardet
from chardet.universaldetector import UniversalDetector
with open('style.css', mode='rb') as f:
detector = UniversalDetector()
for binary in f:
detector.feed(binary)
if detector.done:
break
detector.close()
enc1 = detector.result
with open('style.css', mode='rb') as f:
for binary in f:
enc2 = chardet.detect(binary)
print(enc1)
# {'confidence': 0.5002330097559203, 'encoding': 'Windows-1254', 'language': 'Turkish'}
print(enc2)
# {'confidence': 1.0, 'encoding': 'ascii', 'language': ''}
ちなみに「style.css」はShift_JISのファイルなんで、厳密には誤検出してるんやがとりあえずこれで実害無くなったので。
結論
Perlでかきたい。
Author And Source
この問題について(pythonのchardetでWindows-1254とか誤検出するときはuniversaldetectorではなく素のdetectを使う), 我々は、より多くの情報をここで見つけました https://qiita.com/zoker/items/e2e3aa6d07d3769058c7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .