2010-09-24 11 views
5

Ich analysiere RTF 1.5+ -Dateien, die von Word 2003+ generiert wurden und Inhalte aus anderen Sprachen enthalten können. Dieser Inhalt wird normalerweise als Hex-Literale (\ 'xx) codiert. Ich möchte diese Literale in Unicode-Werte umwandeln.So ermitteln Sie, welche Codepage beim Konvertieren von RTF-Hex-Literalen in Unicode verwendet wird

Ich kenne die Codepage meines Dokuments, indem ich nach ansicpg (\ ansi \ ansicpg1252) suche.

Wenn ich die ansicpg-Codepage zum Decodieren in Unicode verwende, scheinen viele Sprachen (wie Französisch) in die Unicode-Zeichenwerte zu konvertieren, die ich erwarte.

Wenn ich jedoch russischen Text (wie unten) sehe, decodiert die Codepage 1252 den Inhalt zu Jibberish.

\ F277 \ lang1049 \ langfe1033 \ langnp1049 \ insrsid5989826 \ charrsid6817286 \ 'd1 \' f2 \ 'f0 \' e0 \ 'ed \' e8 \ 'f6 \' fb \ 'e1 \' e5 \ 'e7 \ ed \ 'e0 \' e7 \ 'e2 \' e0 \ 'ed \' e8 \ 'ff. \ 'dd \' f2 \ 'e0 \' f1 \ 'f2 \' f0 \ 'e0 \' ed \ 'e8 \' f6 \ 'e0 \' ed \ 'e5 \' e4 \ 'ee \' eb \ 'e6 \' ed \ 'e0 \' ee \ 'f2 \' ee \ 'e1 \' f0 \ 'e0 \' e6 \ 'e0 \' f2 \ 'fc \' f1 \ 'ff \' e2 \ ' f2 \ 'e0 \' e1 \ 'eb \' e8 \ 'f6 \' e5 \ 'e2 \' f1 \ 'ee \' e4 \ 'e5 \' f0 \ 'e6 \' e0 \ 'ed \' e8 \ 'e8.

Ich nehme an, dass lang1049, langfe1033, langnp1049 sollte mir Hinweise geben, damit ich programmgesteuert eine andere Codepage (nicht standardmäßige) für den Text wählen kann, die sie verweisen? Wenn ja, wo finde ich Informationen, die erklären, wie man einen lang * -Code einer Codepage zuordnen kann? Oder sollte ich nach einem anderen RTF-Befehl/einer anderen RTF-Anweisung suchen, um mir die Informationen zu liefern, nach denen ich suche? (Oder muss ich \ f277 als Zeichensatzreferenz verwenden und prüfen, ob eine Codepage vorhanden ist?)

Antwort

2

\lang markiert wirklich nur bestimmte Abschnitte des Textes als in einer bestimmten Sprache, und sollte nicht beeinflussen, welche Codepage ist für die alten Nicht-Unicode \' Escape verwendet werden.

ein \ansicpg Token im Header Putting sollte es vielleicht tun, aber scheint von Word ignoriert werden (sowohl für rohe Bytes und \' entkommt.

Oder muss ich \ F277 als Schriftreferenz und sehen wenn es ein zugehöriges Codepage hat?

es sieht so aus. ändern die \fcharset der Schriftart auf eine bestimmte Strecke von Text zugewiesen ist der einzige Weg ist, kann ich Wort bekommen zu ändern, wie es den Bytes behandelt, sowieso. die Codes in diesem Token (siehe zB here für die Liste) sind, erschwerend, anders als entweder die Sprache ID oder die Code-Nummer.

+0

Danke Bobince - das ist genau der Tipp, den ich brauchte. Sie haben Recht, der gesamte Prozess ist umständlich, kompliziert und ärgerlich. – Malcolm

Verwandte Themen