Pergunta

Eu tenho um ANSI codificado arquivo de texto que não deveria ter sido codificado como ANSI, como não foram acentuados caracteres que ANSI não suporta. Prefiro trabalhar com UTF-8.

Pode os dados ser decodificado corretamente ou está perdido na transcodificação?

Quais as ferramentas que eu poderia usar?

Aqui está uma amostra do que eu tenho:

ç é

Eu posso dizer a partir do contexto (cafà © deve ser café) que estes devem ser esses dois personagens:

ç é
Foi útil?

Solução

EDIT: A simples possibilidade de eliminar antes de entrar em soluções mais complicado: você já tentou definir o conjunto de caracteres para UTF-8 no editor de texto em que você está lendo o arquivo? Este poderia ser apenas um caso de alguém lhe enviando um arquivo UTF-8 que você está lendo em um conjunto editor dizer CP1252.

Apenas tendo os dois exemplos, este é um caso de utf8 ser lido através da lente de uma codificação de um byte, provavelmente uma das iso-8859-1, iso-8859-15, ou CP1252. Se você pode postar exemplos de outros personagens problemáticos, deve ser possível para reduzir isso para baixo mais.

Como a inspeção visual dos personagens pode ser enganosa, você também precisa de olhar para os bytes subjacentes: o § você vê na tela pode ser tanto 0xA7 ou 0xc2a7, e que vai determinar o tipo de conversão conjunto de caracteres que você tem fazer.

Você pode assumir que todos os seus dados tenham sido distorcida em exatamente da mesma forma - que veio da mesma fonte e passado pela mesma sequência de transformações, de modo que, por exemplo, não há um único e em seu texto , é sempre §? Se assim for, o problema pode ser resolvido com uma sequência de conversões conjunto de caracteres. Se você pode ser mais específico sobre o ambiente que você está dentro e o banco de dados que você está usando, alguém aqui pode provavelmente dizer-lhe como realizar a conversão apropriada.

Caso contrário, se os personagens problemáticos estão ocorrendo apenas em alguns lugares em seus dados, você terá que levá-la exemplo, por exemplo, com base em premissas ao longo das linhas de "nenhum autor pretendia colocar § em seu texto, para sempre que você vê-lo, substitua por ç". A última opção é mais arriscado, em primeiro lugar, porque essas suposições sobre as intenções dos autores pode estar errado, em segundo lugar, porque você vai ter que identificar cada personagem problema sozinho, o que pode ser impossível se houver muito texto para inspecionar visualmente ou se está escrito em um idioma ou sistema de escrita que é estranho para você.

Outras dicas

Siga estes passos com Notepad ++

1- Copie o texto original

2 Em Notepad ++, novo arquivo aberto, mudança Encoding -> escolher uma codificação você acha que o texto original segue. Tente também a codificação "ANSI", como às vezes arquivos Unicode são lidos como ANSI por certos programas

3 Cole

4 Então se converter ao Unicode, indo novamente sobre o mesmo menu: Codificação -> "Encode em UTF-8" (Não "Convert to UTF-8") e espero que ela vai se tornar legível

Os passos acima se aplicam para a maioria dos idiomas. Você só precisa adivinhar a codificação original antes de colar no bloco de notas ++, em seguida, converter através do mesmo menu para uma alternativa baseada em Unicode codificação para ver se as coisas se tornam legível.

existem

A maioria das linguagens em 2 formas de codificação: 1- O ANSI formulário antigo legado (ASCII), apenas 8 bits, foi usado inicialmente pela maioria dos computadores. 8 bits só permitiu 256 possibilidades, 128 deles, onde os caracteres latinos e controle regulares, os últimos 128 bits eram lidos de forma diferente, dependendo das configurações de idioma PC 2 O novo padrão Unicode (até 32 bits) dão um código único para cada personagem em todas as línguas atualmente conhecidos e muito mais para vir. se um arquivo é unicode deve ser entendido em qualquer PC com fonte do idioma instalado. Note-se que mesmo UTF-8 vai até 32 bits e é tão amplo como UTF-16 e UTF-32 só ele tenta ficar 8 bits com caracteres latinos apenas para economizar espaço em disco

Quando você vê sequências de caracteres como o § Ã © e, geralmente é uma indicação de que um arquivo UTF-8 foi aberto por um programa que lê-lo como ANSI (ou similar). caracteres Unicode como estas:

U + 00C2 A maiúsculo com acento circunflexo
U + 00C3 A maiúsculo com til
U + 0082 Pausa permitida aqui
U + 0083 Sem pausa aqui

tendem a aparecer em ANSI texto por causa da estratégia variável byte que UTF-8 usos. Esta estratégia é muito bem explicado aqui .

A vantagem para você é que o aparecimento desses personagens estranhos torna relativamente fácil de encontrar, e, assim, substituir, os casos de conversão incorreta.

Acredito que, uma vez ANSI sempre usa 1 byte por caractere, você pode lidar com esta situação com uma simples pesquisa e substituir operação. Ou, mais convenientemente, com um programa que inclui uma tabela de mapeamento entre as sequências de ofensa e os caracteres desejados, como estes:

Um € œ -> “# deve ser uma abertura dupla encaracolado Citação
â €? ->”# deve ser um fechamento duplo encaracolado Citação

Qualquer texto dado, assumindo que é em Inglês, terá um número relativamente pequeno de diferentes tipos de substituições.

Espero que ajude.

Com vim de linha de comando:

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename

No editor de texto sublime, o arquivo -> reabrir com codificação -.> Escolha a codificação correta

Geralmente, a codificação é detectada automaticamente, mas se não, você pode usar o método acima.

Se você vê pontos de interrogação no arquivo ou se os acentos já está perdido, voltando para utf8 não vai ajudar sua causa. por exemplo. se café tornou-se café -. mudando codificação por si só não vai ajudar (e você vai precisar de dados original)

Você pode colar algum texto aqui, que vai nos ajudar a responder com certeza.

E depois há a href="http://directory.fsf.org/project/recode/" rel="nofollow noreferrer"> recode programa

Existem programas que tentam detectar a codificação de um arquivo como chardet . Então você pode convertê-lo para uma codificação diferente usando iconv. Mas isso requer que o texto original ainda está intacto e nenhuma informação é perdida (por exemplo através da remoção de acentos ou letras acentuadas inteiros).

Eu encontrei uma maneira simples de detectar automaticamente as codificações de arquivos - alterar o arquivo para um arquivo de texto (em um Mac renomear a extensão do arquivo para .txt) e arraste-o para uma janela Mozilla Firefox (ou File -> Open). Firefox irá detectar a codificação - você pode ver o que ele veio com sob View -.> Codificação de caracteres

Eu mudei a codificação do meu arquivo usando TextMate uma vez que eu sabia que a codificação correta. Arquivo -> Reabrir usando codificação e escolher a sua codificação. Então Arquivo -> Salvar como e alterar a codificação para terminações UTF-8 e de linha para LF (ou o que quiser)

No OS X Synalyze It! permite exibir partes do seu arquivo em diferentes codificações (todos os que são apoiados por a biblioteca ICU). Depois de saber qual é a fonte de codificação você pode copiar o arquivo inteiro (bytes) via prancheta e inserção em um novo documento em que a codificação alvo (UTF-8 ou o que quiser) é selecionado.

Muito útil quando se trabalha com outras representações Unicode UTF-8 ou é UnicodeChecker

Eu encontrei esta pergunta na busca de uma solução para um problema de página de código que tive com caracteres chineses, mas no final o meu problema era apenas um problema com o Windows não exibi-los corretamente na interface do usuário.

No caso de alguém mais tem esse mesmo problema, você pode corrigi-lo simplesmente alterando o local em janelas para a China e, em seguida, voltar novamente.

Eu encontrei a solução aqui:

http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-get-chinesejapanese-characters- to / fdb1f1da-b868-40d1-a4a4-7acadff4aafa? page = 2 & auth = 1

Além disso upvoted resposta de Gabriel como olhar para os dados no bloco de notas ++ foi o que me deu a dica sobre o Windows.

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