一些编写不当的程序导出了具有错误希伯来语编码的 Excel 文件,其中包含如下神秘字符串:
ãåç ì÷åçåú äåãòåú åéîé äåìãú
使用编码解析器站点,我发现原文是:
דוח לקוחות הודעות וימי הולדת
顺便说一下,在希伯来语中,它的意思是“客户报告通知和生日”。
有没有办法从 Excel 内部更改整个文档的编码?
答案1
- 将文件保存为 .csv 逗号分隔格式。
- 在 OpenOffice 中打开它,它会让你将编码更改为正确的编码。
- 在 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
玩得开心!