Ich habe mehrere Dateien in mehreren verschiedenen Sprachen. Ich dachte, sie wären alle UTF-8 kodiert, aber jetzt bin ich mir nicht mehr so sicher. Einige Charaktere sehen gut aus, andere nicht. Gibt es einen Weg, wie ich die Strings ausbrechen und versuchen kann, die Zeichensätze zu identifizieren? Vielleicht auf weißem Raum aufgeteilt, dann jedes Wort identifizieren? Gibt es schließlich eine einfache Möglichkeit, Zeichen aus einem Satz in UTF-8 zu übersetzen?Wie ermittle ich den Zeichensatz eines Strings?
Antwort
Wenn Sie die Zeichen sicher Sie setzen nicht wissen können, im Grunde nur raten. utf8::valid könnte Ihnen dabei helfen, aber Sie können nicht wirklich sicher wissen. Wenn du weißt, dass wenn es nicht Unicode ist, muss es ein bestimmter Zeichensatz sein (wie Latin-1), du Glück. Wenn du keine Ahnung hast, bist du verrückt. In jedem Fall sollten Sie immer davon ausgehen, dass die gesamte Datei denselben Zeichensatz enthält, sofern nicht anders angegeben. Du wirst deinen Verstand verlieren, wenn du es nicht tust.
Was Ihre Frage, wie zwischen Zeichensätzen konvertieren: Encode gibt es zu tun, dass für Sie
Feststellung, ob eine Datei wahrscheinlich UTF-8 ist oder nicht recht einfach sein sollte. Das Bestimmen der Codierung, wenn es nicht UTF-8 ist, wäre im Allgemeinen sehr schwierig.
Wenn die Datei mit UTF-8 codiert ist, sollten die hohen Bits jedes Bytes einem Muster folgen. Wenn ein Zeichen ein Byte ist, wird sein High-Bit gelöscht (Null). Andernfalls wird ein n
Byte-Zeichen (wobei n 2 – 4 ist) die hohen n
Bits des ersten Bytes auf eins gesetzt, gefolgt von einem einzelnen Null-Bit. Die folgenden n - 1
Bytes sollten alle das höchste Bit gesetzt und das zweithöchste Bit gelöscht haben.
Wenn alle Bytes in Ihrer Datei diesen Regeln folgen, ist es wahrscheinlich mit UTF-8 codiert. Ich sage wahrscheinlich, weil jeder eine neue Codierung erfinden kann, die zufälligerweise oder zufällig denselben Regeln folgt, aber die Codes anders interpretiert.
Beachten Sie, dass eine mit US-ASCII codierte Datei diesen Regeln folgt, aber das High-Bit jedes Bytes ist Null. Es ist in Ordnung, eine solche Datei als UTF-8 zu behandeln, da sie in diesem Bereich kompatibel ist. Ansonsten ist es eine andere Kodierung, und es gibt keinen inhärenten Test, um die Kodierung zu unterscheiden. Sie müssen etwas kontextbezogenes Wissen verwenden, um zu erraten.
- 1. Wie ermittle ich den Wert eines symbolischen Pfades?
- 2. Wie ermittle ich in Java den Typ eines Arrays dynamisch?
- 3. Wie ermittle ich den Farbmodus eines hochgeladenen Bildes in ASP.Net
- 4. Wie ermittle ich den richtigen Dateisystempfad
- 5. Wie ermittle ich die Koordinaten eines Artikels innerhalb eines Stackpanels?
- 6. Wie ermittle ich die Länge eines Fixnum in Ruby?
- 7. Wie ermittle ich den idealen Wert für meinen Datenbank.yml-Pool?
- 8. Wie ermittle ich den Datentyp für ein Programm?
- 9. Wie erhält man den Kodierungstyp eines Strings?
- 10. Wie finde ich den richtigen Datentyp zum Konvertieren eines Strings?
- 11. Wie entferne ich den ersten Teil eines Strings in bash?
- 12. Ich kann den Zeichensatz nicht herausfinden
- 13. Wie ermittle ich das passende Prüfintervall?
- 14. Wie ändere ich den Zeichensatz der XMLTYPE-Variablen?
- 15. Wie überprüft man den Zeichensatz der Zeichenfolge?
- 16. Wie ermittle ich Audio-Funktionen auf Android?
- 17. Wie ermittle ich, was Oracle Spatial verwendet?
- 18. Wie ermittle ich meine Ghc-Version?
- 19. Wie ermittle ich programmatisch, wenn ehcache läuft?
- 20. Wie berechne ich die Höhe eines Strings?
- 21. URLConnection bekommt den Zeichensatz nicht
- 22. Wie übertrage ich den Besitz von Strings?
- 23. Backslash in einem Zeichensatz eines Python Regexp (wie 'kein Backslash' Zeichensatz angeben)?
- 24. So zeigen Sie ein bestimmtes Bild aus einem Zeichensatz basierend auf bestimmten Zeichen eines Strings an
- 25. Wie setze ich einen leeren Zeichensatz
- 26. Wie erkennt man den Hash-Algorithmus eines Strings?
- 27. Trim-String mit spezifischem Zeichensatz
- 28. Android: Wie ermittle ich die Bildschirmkoordinaten eines langen Druckes, der ein Kontextmenü öffnet
- 29. VSTO 2007: Wie ermittle ich die Seiten- und Absatznummer eines Bereichs?
- 30. Wie erhalte ich den Wert eines Nachkommenelements?