Es gibt eine Python-Bibliothek namens chardet. Wenn Sie die Byte-Zeichenfolge eingeben, können Sie ableiten, in welchen Zeichencode die Byte-Zeichenfolge geschrieben wurde.
Ich wollte Chardet mit Python3 verwenden, aber der Beamte ist noch nicht mit Python3 kompatibel.
Als ich danach suchte, fand ich eine Bibliothek namens python3-chardet, die Chardet gabelte, und entschied mich, sie zu verwenden.
Herunterladen und installieren von github.
$ git clone [email protected]:bsidhom/python3-chardet.git
In dem Verzeichnis erstellt in
$ python setup.py install
Dann ist die Installation abgeschlossen.
ipython3
import chardet
chardet.detect('abc'.encode('utf-8'))
> {'confidence': 1.0, 'encoding': 'ascii'}
chardet.detect('AIUEO'.encode('utf-8'))
> {'confidence': 0.9690625, 'encoding': 'utf-8'}
chardet.detect('AIUEO'.encode('Shift-JIS'))
> {'confidence': 0.5, 'encoding': 'windows-1252'}
Es hat richtig funktioniert. Ich mache mir ein wenig Sorgen, dass'aiueo'.encode ('Shift-JIS') als Windows-1252 eingestuft wurde, aber da das Vertrauen 0,5 beträgt, ist das Vertrauen von Chardet möglicherweise halb zuversichtlich. Der Satz war zu kurz, daher kann ihm nicht geholfen werden.
Wir haben weitere Experimente durchgeführt, um zu prüfen, ob es beim Erstellen von Skripten für Webseiten verwendet werden kann.
Die Zielwebsite ist price.com http://kakaku.com/. Es ist genau richtig, weil es Shift_JIS verwendet.
ipython3
import chardet
import requests
r = requests.get('http://kakaku.com')
chardet.detect(r.content)
> {'confidence': 0.99, 'encoding': 'SHIFT_JIS'}
Er traf eine gute Entscheidung. Im Gegensatz zum Beispiel von'aiueo'.encode ('Shift-JIS') wurde SHIFT_JIS anstelle von Windows-1252 korrekt beurteilt, da eine Spalte mit langen Bytes für die gesamte Webseite als Ziel ausgewählt wurde. Scheinen. Das Vertrauen hat ebenfalls zugenommen.
Ich bemerkte später, dass es eine Python-Bibliothek der C-Erweiterung namens [cChardet] gab (https://github.com/PyYoshi/cChardet). Kann mit Python3 verwendet werden. Py Yoshi ist unglaublich.
Da es sich um Pypi handelt, können Sie es unter https://pypi.python.org/pypi/cchardet/pip herunterladen.
$ pip install cchardet
Da es eine große Sache ist, habe ich die obere Seite von Price.com verwendet, um die Geschwindigkeiten zu vergleichen. Der Code lautet wie folgt.
compare.py
import chardet
import cchardet
import requests
import time
if __name__ == '__main__':
r = requests.get('http://kakaku.com')
begin_time = time.clock()
guessed_encoding = chardet.detect(r.content)
end_time = time.clock()
print('chardet: %f, %s' % (end_time - begin_time, guessed_encoding))
begin_time_of_cc = time.clock()
guessed_encoding_by_cc = cchardet.detect(r.content)
end_time_of_cc = time.clock()
print('cChardet: %f, %s' % (end_time_of_cc - begin_time_of_cc, guessed_encoding_by_cc))
Und das Ergebnis ist wie folgt.
chardet: 1.440141, {'confidence': 0.99, 'encoding': 'SHIFT_JIS'}
cChardet: 0.000589, {'confidence': 0.9900000095367432, 'encoding': 'SHIFT_JIS'}
Ist es nicht überwältigend?
Verwenden Sie cChardet! !! !!
Recommended Posts