web-dev-qa-db-ja.com

Excelエンコーディングを変更する

一部の不適切なプログラムは、次のような不可解な文字列を使用して、間違ったヘブライ語エンコーディングでExcelファイルをエクスポートしました。

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

encoding-solver site を使用して、元のテキストが次のとおりであることがわかりました。

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

ちなみに、これはヘブライ語で「クライアントレポート-通知と誕生日」を意味します。

Excel内からドキュメント全体のエンコーディングを変更する方法はありますか?

2
Adam Matan
  1. ファイルを.csvコンマ区切り形式で保存します。
  2. OpenOfficeで開くと、エンコーディングを適切なものに変更できます。
  3. OpenOfficeにいる間に、ファイルを.xls形式に保存し直します。
2
Boris

これは完全な解決策ではありませんが、解決策への一歩のようです。

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

楽しんで!

1
Tony Dallimore