Alterar codificação do Excel

2

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?

    
por Adam Matan 01.12.2011 / 22:10

2 respostas

2

  1. Salve o arquivo no formato .csv delimitado por vírgulas.
  2. Abra no OpenOffice, ele permitirá que você mude a codificação para a correta.
  3. No OpenOffice, salve o arquivo no formato .xls.
por 26.08.2012 / 10:42
1

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!

    
por 02.12.2011 / 12:55