一部の不適切なプログラムは、次のような不可解な文字列を使用して、間違ったヘブライ語エンコーディングでExcelファイルをエクスポートしました。
ãåç ì÷åçåú äåãòåú åéîé äåìãú
encoding-solver site を使用して、元のテキストが次のとおりであることがわかりました。
דוח לקוחות הודעות וימי הולדת
ちなみに、これはヘブライ語で「クライアントレポート-通知と誕生日」を意味します。
Excel内からドキュメント全体のエンコーディングを変更する方法はありますか?
これは完全な解決策ではありませんが、解決策への一歩のようです。
2つの文字列は両方とも28文字の長さであり、1対1のエンコーディングを示しています。
2つの文字列を16進数で表示すると、次のようになります。
(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)
2行目は、予想どおり、主にヘブライ文字のUnicode値です。
最初の行を取得するための変換は次のようになります。
20 (space) unchanged
5Dx Ex
5Ex Fx
ヘブライ文字のUnicode値は16進数の591から5F4まで拡張されるため、これは完全な変換チャートではありません。
次の大まかなルーチンは、最初の文字列を受け入れ、2番目の文字列を返します。
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
次のルーチンを使用して、文字列をイミディエイトウィンドウに出力しました。さらにいくつかの例を使用すると、すべての変換を決定できます。ヘブライ文字の16進数の591から5C7は、10進数の1264を追加することによって変換することもできますが、これをヘブライ文字の5F0から5F4に変換することはできません。
Sub HexOut(Stg)
Dim Pos
For Pos = 1 To Len(Stg)
Debug.Print "(" & Hex(AscW(Mid(Stg, Pos, 1))) & ")";
Next
Debug.Print
End Sub
楽しんで!