Como faço para corrigir a codificação de caracteres de um arquivo?
-
02-07-2019 - |
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:
ç é
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.
existemA 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 ??p>
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.
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:
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.