Ich bin mit all diesen verwirrenden Kodierung Sachen stecken. Ich habe eine Datei mit chinesischen Subs. Ich glaube tatsächlich, dass es UTF-8 ist, weil ich dies in Notepad ++ benutze, gibt mir ein sehr gutes Ergebnis. Wenn ich gb2312 setze, ist der chinesische Teil immer noch in Ordnung, aber ich werde sehen, dass ein UTF8-Code nicht konvertiert wird.Wie lese ich chinesische Dateien?
Ziel ist es, den Text in der Datei zu durchlaufen und zu zählen, wie oft die verschiedenen Zeichen angezeigt werden.
import os
import re
import io
character_dict = {}
for dirname, dirnames, filenames in os.walk('.'):
for filename in filenames:
if "srt" in filename:
import codecs
f = codecs.open(filename, 'r', 'gb2312', errors='ignore')
s = f.read()
# deleting {}
s = re.sub('{[^}]+}', '', s)
# deleting every line that does not start with a chinese char
s = re.sub(r'(?m)^[A-Z0-9a-z].*\n?', '', s)
# delete non chinese chars
s = re.sub(r'[\s\.A-Za-z0-9\?\!\\/\-\"\,\*]', '', s)
#print s
s = s.encode('gb2312')
print s
for c in s:
#print c
pass
Dies wird tatsächlich den vollständigen chinesischen Text geben. Aber wenn ich die Schleife auf der Unterseite drucke, bekomme ich nur Fragezeichen anstelle der einzelnen Zeichen.
Auch ich sagte, es ist UTF8, aber ich muss gb2312 für die Codierung und als Einstellung in meinem Gnome-Terminal verwenden. Wenn ich es im Code auf UTF8 setze, bekomme ich nur Müll, egal, ob ich mein Terminal auf UTF8 oder Gb2312 setze. Vielleicht ist diese Datei doch nicht UTF8 !?
In jedem Fall enthält s den vollständigen chinesischen Text. Warum kann ich das nicht tun?
Bitte helfen Sie mir, dies zu verstehen. Es ist sehr verwirrend für mich und die Ärzte bringen mich nirgendwohin. Und Google führt mich zu ähnlichen Problemen, die jemand löst, aber es gibt bisher keine Erklärung, die mir geholfen hat, das zu verstehen.
also ist es gb2312 oder UTF-8? Wenn es UTF-8 ist, warum stellen Sie die Kodierung nicht in 'open()' statt in 'gb2312'? So wie es aussieht, macht diese Frage keinen Sinn –
Es ist ** nicht ** UTF-8, es ist [GB2313] (https://en.wikipedia.org/wiki/GB_2312). Sowohl UTF-8 als auch GB2313 sind * encodings *, eine Möglichkeit, Zeichen in Bytes zu codieren. Verwechseln Sie UTF-8 möglicherweise mit dem Unicode-Standard? –
Ja, @MartijnPieters - Ich kenne den Unterschied und weiß auch, dass es sich um Kodierungen für verschiedene Zeichensätze handelt. Das OP scheint die beiden Codierungen/Zeichensätze austauschbar zu verwenden> "Ich glaube tatsächlich, dass es UTF-8 ist, weil die Verwendung in Notepad ++ mir ein sehr gutes Ergebnis gibt." –