Pergunta

Eu tenho um arquivo codificado em ANSI.No entanto, mostra letras árabes dentro dele.este arquivo de texto foi gerado por algum programa (não tenho informações sobre ele), mas parece que há algum tipo de codificação interna (se assim posso dizer e se é possível) para que as letras árabes apareçam.

Existe uma coisa dessas?Caso contrário, como o arquivo ANSI pode mostrar as letras árabes?

*Se possível, explique em código Java


Edição 01

Quando abro no Notepad++, mostra que a codificação da página é ANSI.Por favor, verifique esta foto:

http://www.4shared.com/file/221862075/e8705951/text-Windows.html


Edição 02

você pode verificar o arquivo em:

http://www.4shared.com/file/221853641/3fa1af8c/data.html

Foi útil?

Solução

Tentei abrir o arquivo no Firefox e na Opera. Eu tive que definir a codificação de caracteres para o Windows-1256 árabe para que ele seja exibido corretamente nos dois navegadores, para que a codificação do arquivo seja mais provável de ser isso.

NOTA: Eu publiquei isso originalmente como um comentário, mas me pediram para fazer uma resposta.

Outras dicas

Como você sabe que é ANSI codificado? Se não for uma codificação de vários bytes como o UTF-8, meu palpite seria codificado usando uma página de código árabe como esta: Windows-1256.

Você pode olhar para o arquivo em um editor hexadecimente e descobrir quais números os caracteres árabes têm e, dessa forma, tente descobrir com qual página de codificação / código foi criada.

Resposta curta:Provavelmente, seu arquivo de texto não é codificado em "ANSI", mas sim em utf-8.

Resposta longa:

Primeiro, o termo “ANSI” (no Windows) não significa uma codificação fixa;seu significado depende das configurações de idioma.Por exemplo, na Europa Ocidental e nos EUA, normalmente será Windows-1252 (uma variante de ISO/IEC 8859-1, também conhecida como latin-1), no Japão, é Mudança JIS, e nos países árabes, é ISO/IEC_8859-6.

Se você estiver usando uma versão não árabe do Windows e não tiver alterado as configurações de idioma, e puder ver letras árabes no arquivo ao abri-lo no Bloco de Notas, então certamente não está em nenhuma dessas codificações ANSI.Em vez disso, é provavelmente Unicode.

Observe que não me refiro a "UNICODE", que no Windows geralmente significa UTF-16LE.Poderia ser UTF-8 também.Ambas são codificações que podem codificar todos os mais de 100.000 caracteres atualmente definidos em Unicode, mas fazem isso de maneiras diferentes.Ambos são codificações de comprimento variável, o que significa que nem todos os caracteres são codificados usando o mesmo número de bits.

Em UTF-8, cada caractere é codificado como um a quatro bytes.A codificação foi escolhida de forma que os caracteres ASCII sejam codificados em um byte.

Em UTF-16, cada caractere é codificado como dois ou quatro bytes.Essa codificação foi originalmente inventada quando o Unicode tinha menos de 64K caracteres e, portanto, era possível codificar cada caractere em uma única palavra de 16 bits.Mais tarde, quando ficou claro que o Unicode teria que crescer além do limite de 64K, foi inventado um esquema onde pares de palavras no intervalo 0xD800-0xDFFF são usados ​​para representar caracteres fora dos primeiros 64K (menos 0x800).

Para ver o que realmente está no arquivo, abra-o em um editor hexadecimal:

  • Se os dois primeiros bytes forem FF FE, então provavelmente é UTF-16LE (little endian)
  • Se os dois primeiros bytes forem FE FF, então provavelmente é UTF-16BE (big endian, improvável no Windows)
  • Se os três primeiros bytes forem EF BB BF, provavelmente será UTF-8
  • Se você vir muitos 00 bytes, provavelmente é UTF-16 (ou UTF-32, se você vir pares de 00 BYtes)
  • Se os caracteres árabes ocuparem um único byte, é provável que seja ISO-8859-6 (por exemplo,ش seria D5).
  • Se os caracteres árabes ocuparem vários bytes, é provável que seja UTF-8 (por exemplo,Ô seria D8 B4).

Existe uma coisa dessas?

Não.

Caso contrário, como o arquivo ANSI pode mostrar as letras árabes?

Não é um arquivo codificado do Windows-Ansi. Mais provavelmente, ele usa um codificação de largura variável, provavelmente UTF-8: muitas posições comuns de caracteres no UTF-8 são equivalentes a suas posições na US-ASCII (na verdade, foi projetado dessa maneira) e por inferência também para o Windows-Ansi.

EDITAR: Temos que agradecer à Microsoft por essa confusão. "ANSI" não é bem especificado quando se trata de codificações. Geralmente, é destinado a representar o padrão do Windows codificando com o CodePage 1252 ("Windows-1252"), que corresponde a alfabetos "ocidentais" derivados do latim.

No entanto, em outros países, a codificação padrão usada pelo Windows (nas versões mais antigas do Windows ... hoje, o padrão é UTF-8) é não Windows-1252, mas uma codificação diferente, que também é chamada de "ANSI". Nesse caso, o codepage 1256.

A codificação de caracteres ANSI permite 217 caracteres e não contém letras árabes. Eu acho que talvez o arquivo use uma codificação alternativa.

Anexando sua edição, parece que o problema está no bloco de notas ++, porque o que está sendo exibido está claramente além das capacidades do Ansi Charset.

Primeiro, baixei seu arquivo e tentei usar o VIM para verificar sua codificação e não parecia saber e em uma segunda máquina dizia latin1 o que poderia ser semelhante ao que aconteceu no Notepad ++ (deu a resposta genérica).
então eu fiz file data.txt E a saída foi a seguinte:

data.txt: ISO-8859 text, with CRLF line terminators

espero que isto ajude.

EDITAR:
Usando a coisa do navegador mostrou que essa resposta está incorreta.

ISO-8859-4 e ISO-8859-13 podem exibir o texto, sem erros, mas os personagens onde não estão em árabe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top