- Salve o arquivo no formato .csv delimitado por vírgulas.
- Abra no OpenOffice, ele permitirá que você mude a codificação para a correta.
- No OpenOffice, salve o arquivo no formato .xls.
Algum programa mal escrito exportou um arquivo do Excel com a codificação hebraica incorreta, com strings enigmáticas como:
ãåç ì÷åçåú äåãòåú åéîé äåìãú
Usando um site de solucionador de codificação , descobri que o texto original era:
דוח לקוחות הודעות וימי הולדת
Que, a propósito, significa "Notificações de relatórios de clientes e aniversários", em hebraico.
Existe uma maneira de alterar a codificação de todo o documento a partir do Excel?
Esta não é uma solução completa, mas parece ser um passo em direção à solução.
As duas cadeias têm 28 caracteres, o que sugere uma codificação de um para um.
Exibindo as duas cadeias em hexadecimal, fornece:
(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)
A segunda linha é principalmente os valores Unicode para letras hebraicas como esperado.
A conversão para obter a primeira linha parece ser:
20 (space) unchanged
5Dx Ex
5Ex Fx
Este não é um gráfico de conversão completo porque os valores Unicode para as letras hebraicas vão do hexadecimal 591 ao 5F4.
A rotina bruta a seguir aceita a primeira string e retorna a segunda.
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
Eu usei a seguinte rotina para enviar as strings para a janela imediata. Com mais alguns exemplos, você poderá determinar todas as conversões. As letras hebraicas hexadecimais 591 a 5C7 também podem ser convertidas adicionando 1264 decimais, mas esta não pode ser a conversão para as letras hebraicas 5F0 a 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
Divirta-se!