Frage

Ich versuche, einige Legacy-Code zu erhalten, die chinesischen Zeichen angezeigt werden soll. Eine Zeichencodierung Ich versuche, mit beginnt mit einem 0x7F zu arbeiten und ist 4 Bytes lang (einschließlich des 0x7F Byte). Wer weiß, welche Art von Codierung ist das und wo kann ich Informationen für sie finden? Dank ..

UPDATE: Ich habe auch mit einigen japanischen Codierung zu arbeiten, die jedes Zeichen mit einem 0xE3 beginnt und drei Bytes lang. Es zeigt auf meinem Computer richtig, wenn ich das japanische Gebietsschema in Windows jedoch wählen, ist es nicht richtig angezeigt wird in unserer Anwendung. Wenn jedoch andere locale außer Japanisch ausgewählt ist, kann ich nicht einmal die Dateinamen korrekt anzuzeigen. Also ich vermute, diese Codierung nicht Unicode ist. Wer weiß, was es ist? Ist es ANSI? Ist es JIS Shift-?

Für die Chinesen ein, ich habe es mit Unicode und UTF-8-Zeichen getestet und ich das gleiche Muster bekommen; 0x7F gefolgt von drei Bytes. Sind Unicode und UTF-8 gleich?

War es hilfreich?

Lösung

  

Ein Zeichencodierung Ich versuche, mit beginnt mit einem 0x7F zu arbeiten und ist 4 Byte lang

Was sind die anderen Bytes? Sie haben keinen lateinischen Text in dieser Codierung?

Wenn es „0x7f 0x ... 0x00 0x00“ Sie UTF-32LE suchen. Es könnte auch zwei UTF-16 (entweder LE oder BE) Zeichen lang sein.

Die meisten ostasiatischen Codierungen 0x80-0xFF als Lead-Bytes für Nicht-ASCII-Zeichen verwendet werden; es gibt keine die ich kenne, verwenden würde eine führende 0x7F als etwas anderes als eine ASCII löschen.

ETA:

  

gibt es angeblich Byte Order Marks sein?

Es muss kein BOM sein, wenn es eine Out-of-Band-Art und Weise der signalisiert, dass die Codierung ‚UTF-32LE‘ (möglicherweise eine, die verloren geht, bevor es Ihnen bekommt).

  

Ich habe auch mit einigen japanischen Codierung zu arbeiten, die jedes Zeichen mit einem 0xE3 beginnt und drei Bytes lang.

Das ist sicherlich UTF-8. Sequence 0xE3 0x ... 0x ... würde zu einem Zeichen zwischen U + 3000 und U + 4000, das ist, wo die Hiragana / Katakana zu Hause ist.

  

Es zeigt auf meinem Computer richtig, wenn ich das japanische Gebietsschema in Windows wählen, ist es jedoch nicht richtig in unserer Anwendung nicht angezeigt.

Dann stehen die Chancen, Ihre Anwendung ist eine der bedauerns Horde von Nicht-Unicode-kompatibelen Anwendungen, noch ‚A‘ (*) Versionen der Win32-Schnittstellen innerhalb der ‚W'-suffixed diejenigen verwenden. Egal, ob Sie in der Zeichenfolge nach seiner realen Codierung ist strittig lesen können: a. Nicht-Unicode-kompatible App der Lage sein, wird nie eine ostasiatische ideograph auf einer Western-locale angezeigt wird

(*:.., Benannt nach „ANSI“, die für Windows irreführende Bezeichnung ist „was auch immer das System Codepage im Moment gesetzt“ Deshalb Ihren Standort ändert es affected)

ETA (2):

OK, es geknackt. Es ist nicht standardisierte Codierung ich vorher getroffen habe, aber es ist relativ leicht zu entziffern, wenn man die Prämisse setzt voraus, dass Unicode-Codepunkte codiert werden.

0x00-0x7E: plain ASCII
0x7F A B C: Unicode character

Die Zeichen in einem Unicode-Escape codiert wird, können, indem den Index in einem Schlüsselzeichenfolge von A, B und C und Aufaddieren berechnet werden:

A*0x1000 + B*0x40 + C

Das heißt, es ist ein Base64-Zeichensatz, aber es ist nicht der üblicher Base64-Standard. Ein wenig Experimentieren gibt eine Schlüsselkette:

.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

Die ‚‘ und ‚_‘ Zeichen Vermutungen sind, da keines der Zeichen, die Sie ihnen geschrieben verwendet. Wir würden mehr Daten müssen exakt die gleiche Zeichenkette erfahren.

So zum Beispiel:

0x7F 3 u g
A=4 B=58 C=44
4*0x1000 + 58*0x40 + 44 = 0x4EAC
U+4EAC = 京

ETA (3):

Ja, sollte es leicht sein, eine native Unicode-Zeichenfolge zu erstellen, indem jeden Codepunkt manuell Aussaugen und als Charakter verbindet. Nicht ganz sicher, was verfügbar ist, was auch immer Plattform Sie verwenden, aber jede Unicode-fähige Plattform sollte einfach einen String aus Codepoints zu machen in der Lage (und hoffentlich ohne manuell neu codieren zu UTF-16LE Bytes).

habe ich es Unicode-Codepoints von zu bemerken sein, dass die drei Beispiel Zeichen hatten zunächst ausbruch Zeichen in dem gleichen allgemeinen Bereich und in der gleichen numerischen Reihenfolge wie ihre Unicode-Codepoints. Die beiden anderen Zeichen schien zufällig zu ändern, so war es sehr wahrscheinlich, dass ein Big-Endian-Codierung des Codepunkt und wahrscheinlich eine Base64-Codierung als 6 ist, so viele Bits, wie Sie aus lesbaren ASCII erhalten können.

Standard Base64 selbst beginnt mit den Buchstaben, die zu weit etwas beginnend mit einer Reihe setzen würden oben in der Basic Multilingual Plane zu sein. Also begann ich mit ‚0123456789ABCDEFG ...‘ raten, die die andere offensichtliche Wahl der Schlüsselfolge wäre. Das hat sich ergebende Zahlen, die für die angegebenen Zeichen der Nähe der Codepunkte waren, aber ein bisschen zu niedrig. Einfügen eines zusätzlichen Zeichen zu Beginn des Tastenfolge (so Ziffer ‚0‘ Karte nicht auf Nummer 0) bekam eine der Figuren rechts und die anderen beiden sehr nahe; derjenige, der Recht hatte, wurde keine Kleinbuchstaben, um so nur zu änderndie Kleinbuchstaben eingefügt I ein anderes Zeichen zwischen den oberen und unteren Gehäusen. Dieser kam mit den richtigen Zahlen auf.

Es ist nicht garantiert, dass dies tatsächlich richtig ist, aber (abgesehen von der willkürlichen Wahl der eingefügten Zeichen), ist es sehr wahrscheinlich, dass es sein.

Andere Tipps

Sie können unter chinesische Zeichencodierung Seite auf Wikipedia suchen. Die einzige Codierung da drin, dass ich sehen kann, ist immer 4 Bytes ist UTF-32 .

GB 18030 ist der aktuelle Standard chinesischen Zeichensatz, aber es kann 1 bis 4 sein Bytes lang.

Versuchen Sie chardet . Es macht einen guten Job, die Zeichencodierung einer Folge von Bytes zu erraten.

  

Sind Unicode und UTF-8 gleich?

Nein. UTF-8 ist nur eine Möglichkeit, Unicode-Zeichen als eine Folge von Bytes darzustellen. Unicode ist der vollständige Standard, jedes Zeichen numerisch und menschenlesbare Kennungen zuweisen sowie viele Metadaten über die Charaktere.

Es könnte eine gültige Unicode-Codierung, wie ein utf-8 oder UTF16-Ersatzpaar sein.

Ja, der Chinese ist UTF-8, eine Implementierung (Codierung) von Unicode. Die UTF-8 ist 1 Byte lang für ASCII-Zeichen und bis zu 4 Byte für die anderen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top