Excel-Kodierung ändern

2802
Adam Matan

Ein schlecht geschriebenes Programm hat eine Excel-Datei mit der falschen hebräischen Kodierung und mit kryptischen Zeichenfolgen exportiert:

ãåç ì÷åçåú äåãòåú åéîé äåìãú 

Mit einer Codierungslöser-Site habe ich herausgefunden, dass der ursprüngliche Text:

דוח לקוחות הודעות וימי הולדת 

Was im Übrigen "Kundenberichtsbenachrichtigungen und Geburtstage" bedeutet, auf Hebräisch.

Gibt es eine Möglichkeit, die Codierung für das gesamte Dokument in Excel zu ändern?

2

2 Antworten auf die Frage

2
Boris
  1. Speichern Sie die Datei im durch Kommas getrennten Format .csv.
  2. Öffnen Sie es in OpenOffice, damit Sie die Kodierung in die richtige Kodierung ändern können.
  3. Speichern Sie die Datei im OpenOffice-Format im .xls-Format.
1
Tony Dallimore

Dies ist keine vollständige Lösung, scheint aber ein Schritt in Richtung Lösung zu sein.

Die beiden Zeichenfolgen sind beide 28 Zeichen lang, was auf eine Eins-zu-Eins-Kodierung schließen lässt.

Die Anzeige der beiden Zeichenfolgen im Hexadezimalformat ergibt:

(E3)(E5)(E7)(20)(EC)(F7)(E5)(E7)(E5)(FA)(20)(E4)(E5)(E3)(F2)(E5)(FA)(20)(E5)(E9)(EE)(E9)(20)(E4)(E5)(EC)(E3)(FA) (5D3)(5D5)(5D7)(20)(5DC)(5E7)(5D5)(5D7)(5D5)(5EA)(20)(5D4)(5D5)(5D3)(5E2)(5D5)(5EA)(20)(5D5)(5D9)(5DE)(5D9)(20)(5D4)(5D5)(5DC)(5D3)(5EA) 

Die zweite Zeile enthält hauptsächlich die Unicode-Werte für hebräische Buchstaben.

Die Konvertierung zum Abrufen der ersten Zeile scheint zu sein:

 20 (space) unchanged 5Dx Ex 5Ex Fx 

Dies ist kein vollständiges Konvertierungsdiagramm, da die Unicode-Werte für die hebräischen Buchstaben von hexadezimal 591 bis 5F4 reichen.

Die folgende grobe Routine akzeptiert die erste Zeichenfolge und gibt die zweite zurück.

Function Decode(CompactStg As String) As String  Dim CompactChar As Integer Dim DecodedChar As Integer Dim DecodedStg As String Dim Pos As Integer  DecodedStg = ""  For Pos = 1 To Len(CompactStg) CompactChar = Asc(Mid(CompactStg, Pos, 1)) Select Case CompactChar Case 32 To 127 ' Hex 20 - 7F ' No change DecodedChar = CompactChar Case 224 To 239 ' Hex E0 - EF ' Convert EX to 5DX DecodedChar = CompactChar + 1264 Case 240 To 255 ' Hex F0 - FF ' Convert FX to 5EX DecodedChar = CompactChar + 1264 End Select DecodedStg = DecodedStg & ChrW(DecodedChar) Next  Decode = DecodedStg  End Function 

Ich habe die folgende Routine verwendet, um die Zeichenfolgen im unmittelbaren Fenster auszugeben. Mit einigen weiteren Beispielen können Sie alle Konvertierungen bestimmen. Die hebräischen Buchstaben hexadezimal 591 bis 5C7 können auch durch Hinzufügen von Dezimalzahlen 1264 konvertiert werden. Dies kann jedoch nicht die Konvertierung für die hebräischen Buchstaben 5F0 bis 5F4 sein.

Sub HexOut(Stg)  Dim Pos  For Pos = 1 To Len(Stg) Debug.Print "(" & Hex(AscW(Mid(Stg, Pos, 1))) & ")"; Next Debug.Print  End Sub 

Habe Spaß!

Vielen Dank für die tolle Arbeit! Eigentlich suche ich nach einer Lösung ohne Programmierung, wie etwa einer internen Excel-Funktion, da der Benutzer der Software kein Computerexperte ist. Adam Matan vor 12 Jahren 0
Mein Hintergrund bedeutet, dass ich fast immer nach einer Programmierlösung für jedes Problem suche. Dies kann ein Fehler sein, da Excel einige erstaunliche Nicht-Programmierfunktionen bietet. Nachdem ich festgestellt hatte, dass die Saiten die gleiche Länge hatten, war die Untersuchung ziemlich einfach. Vielleicht hilft diese Information jemandem, einen anderen Ansatz anzubieten. Es kann hilfreich sein, wenn Sie den Umfang des Problems ermitteln. Sprechen wir über eine relativ kleine Anzahl von Spaltenüberschriften oder Textwerten in jeder von 30.000 Zeilen? Auf jeden Fall sehe ich das nicht als schwieriges Programmierproblem. Vielleicht würde ein kompetenter Freund helfen. Tony Dallimore vor 12 Jahren 0
@ AdamMatan. Ich bin neugierig. Ist etwas daraus geworden? Tony Dallimore vor 12 Jahren 0
Unglücklicherweise nicht. Ich musste eine Problemumgehung beheben, indem ich die Daten als Text exportierte und manuell nach Excel importierte. Adam Matan vor 12 Jahren 0