更改 Excel 编码

更改 Excel 编码

一些编写不当的程序导出了具有错误希伯来语编码的 Excel 文件,其中包含如下神秘字符串:

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

使用编码解析器站点,我发现原文是:

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

顺便说一下,在希伯来语中,它的意思是“客户报告通知和生日”。

有没有办法从 Excel 内部更改整个文档的编码?

答案1

  1. 将文件保存为 .csv 逗号分隔格式。
  2. 在 OpenOffice 中打开它,它会让你将编码更改为正确的编码。
  3. 在 OpenOffice 中,将文件保存回 .xls 格式。

答案2

这不是一个完整的解决方案,但它看起来是朝着解决方案迈出的一步。

这两个字符串都是 28 个字符长,这表明它们是一对一编码。

以十六进制显示这两个字符串得到:

(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)

第二行主要是预期的希伯来字母的 Unicode 值。

获取第一行的转换似乎是:

  20 (space) unchanged
  5Dx        Ex
  5Ex        Fx

这不是一个完整的转换图表,因为希伯来字母的 Unicode 值从十六进制 591 延伸到 5F4。

以下粗略的例程接受第一个字符串并返回第二个字符串。

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

我使用以下例程将字符串输出到即时窗口。通过更多示例,您将能够确定所有转换。希伯来字母十六进制 591 到 5C7 也可以通过添加十进制 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

玩得开心!

相关内容