Como faço para corrigir a codificação de caracteres de um arquivo?

Eu tenho um arquivo de texto codificado em ANSI que não deveria ter sido codificado como ANSI como havia caracteres acentuados que ANSI não oferece suporte. Eu prefiro trabalhar com UTF-8.

Os dados podem ser decodificados corretamente ou perdidos na transcodificação?

Quais ferramentas eu poderia usar?

Aqui está uma amostra do que eu tenho:

ç é 

Eu posso dizer do contexto (café deveria ser café) que estes deveriam ser esses dois personagens:

 ç é 

EDIT: Uma possibilidade simples de eliminar antes de entrar em soluções mais complicadas: você já tentou definir o conjunto de caracteres para utf8 no editor de texto em que você está lendo o arquivo? Isso pode ser apenas o caso de alguém lhe enviar um arquivo utf8 que você está lendo em um editor configurado para dizer cp1252.

Apenas tomando os dois exemplos, este é um caso de utf8 sendo lido através da lente de uma codificação de byte único, provavelmente uma das iso-8859-1, iso-8859-15 ou cp1252. Se você puder postar exemplos de outros caracteres do problema, deverá ser possível restringir isso mais.

Como a inspeção visual dos personagens pode ser enganosa, você também precisará olhar os bytes subjacentes: o § que você vê na canvas pode ser 0xa7 ou 0xc2a7, e isso determinará o tipo de conversão do conjunto de caracteres que você precisa fazer.

Você pode supor que todos os seus dados foram distorcidos exatamente da mesma maneira – que vieram da mesma fonte e passaram pela mesma sequência de transformações, de modo que, por exemplo, não há um único é em seu texto, é sempre UMA§? Nesse caso, o problema pode ser resolvido com uma sequência de conversões de conjuntos de caracteres. Se você puder ser mais específico sobre o ambiente em que você está e o database que está usando, alguém provavelmente poderá lhe dizer como realizar a conversão apropriada.

Caso contrário, se os caracteres do problema estão ocorrendo apenas em alguns lugares em seus dados, você terá que tomá-lo instância por instância, com base em suposições ao longo das linhas de “nenhum autor pretende colocar em seu texto, então sempre que você ver substitua por ç “. A última opção é mais arriscada, em primeiro lugar porque essas suposições sobre as intenções dos autores podem estar erradas, em segundo lugar porque você terá que identificar cada caractere de problema, o que pode ser impossível se houver muito texto para inspecionar visualmente ou se estiver escrito em um idioma ou sistema de escrita que é estranho para você.

Siga estas etapas com o Notepad ++

1- Copie o texto original

2- No Notepad ++, abra o novo arquivo, altere Encoding -> escolha uma codificação que 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- Colar

4- Depois, para converter para Unicode, passando novamente pelo mesmo menu: Codificação -> “Codificar em UTF-8” (Não “Converter em UTF-8”) e esperamos que se torne legível

As etapas acima se aplicam à maioria dos idiomas. Você só precisa adivinhar a codificação original antes de colar no notepad ++, depois converter o mesmo menu em uma codificação alternativa baseada em Unicode para ver se as coisas se tornam legíveis.

A maioria das linguagens existe em duas formas de codificação: 1- A antiga forma legada ANSI (ASCII), apenas 8 bits, era usada inicialmente pela maioria dos computadores. 8 bits permitiram apenas 256 possibilidades, 128 delas em caracteres regulares de latim e controle, os 128 bits finais foram lidos de maneira diferente dependendo das configurações de idioma do PC 2- O novo padrão Unicode (até 32 bits) fornece um código único para cada caractere em todos os idiomas atualmente conhecidos e muito mais por vir. se um arquivo for unicode, ele deve ser entendido em qualquer PC com a fonte do idioma instalada. Note que mesmo o UTF-8 vai até 32 bits e é tão largo quanto o UTF-16 e o ​​UTF-32, apenas ele tenta manter 8 bits com caracteres latinos apenas para economizar espaço em disco

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

U + 00C2 Letra maiúscula latina A com circunflexo
U + 00C3 Letra latina maiúscula A com til
U + 0082 Pausa permitida aqui
U + 0083 Nenhuma pausa aqui

tendem a aparecer em texto ANSI por causa da estratégia de byte variável usada pelo UTF-8. Esta estratégia é explicada muito bem aqui .

A vantagem para você é que a aparência desses caracteres ímpares torna relativamente fácil encontrar e, portanto, replace ocorrências de conversão incorreta.

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

“->“ # deve ser uma abertura de cotação dupla
â €? -> ”# deve ser uma citação dupla de fechamento

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

Espero que ajude.

Com o vim da linha de comando:

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

Use iconv – ver Melhor maneira de converter arquivos de texto entre conjuntos de caracteres?

Se você vir pontos de interrogação no arquivo ou se os acentos já estiverem perdidos, voltar para o utf8 não ajudará sua causa. por exemplo, se o café se tornou café – mudar a codificação por si só não ajudará (e você precisará de dados originais).

Você pode colar algum texto aqui, isso nos ajudará a responder com certeza.

No editor de texto sublime, 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.

E então há o programa de recodificação um pouco mais antigo.

Existem programas que tentam detectar a codificação de um arquivo como o chardet . Então você poderia convertê-lo para uma codificação diferente usando iconv. Mas isso exige que o texto original permaneça intacto e nenhuma informação seja perdida (por exemplo, removendo acentos ou letras acentuadas inteiras).

Eu encontrei uma maneira simples de detectar automaticamente codificações de arquivos – mude o arquivo para um arquivo de texto (em um mac renomear a extensão do arquivo para .txt) e arraste-o para uma janela do Mozilla Firefox (ou Arquivo -> Abrir). O Firefox detectará a codificação – você pode ver o que surgiu sob View -> Character Encoding.

Eu mudei a codificação do meu arquivo usando o TextMate depois que eu soube a codificação correta. Arquivo -> Reabrir usando codificação e escolha sua codificação. Então File -> Save As e mude a codificação para UTF-8 e os finais de linha para LF (ou o que você quiser)

No OS X Synalyze It! permite exibir partes do seu arquivo em diferentes codificações (todas suportadas pela biblioteca do ICU). Depois de saber qual é a codificação de origem, você pode copiar o arquivo inteiro (bytes) pela área de transferência e inserir em um novo documento onde a codificação de destino (UTF-8 ou o que você quiser) está selecionada.

Muito útil ao trabalhar com UTF-8 ou outras representações Unicode é UnicodeChecker

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

No caso de alguém ter esse mesmo problema, você pode consertá-lo simplesmente mudando o local nas janelas para a China e depois de volta.

Eu encontrei a solução aqui:

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

Também avaliei a resposta de Gabriel enquanto olhava os dados no notepad ++ foi o que me alertou sobre as janelas.