Diacríticos corretos em um dump mysql no CentOS

1

No meu servidor do CentOS, eu tenho um arquivo de despejo de uma tabela do mysql que contém caracteres especiais em tcheco (por exemplo, á, é, è, ž). Quando visualizo o arquivo usando cat, os caracteres especiais são quebrados (por exemplo, å em vez de á).

Eu preciso corrigir esses caracteres no dump e, em seguida, importá-lo de volta para o banco de dados.

Já tentei algumas formas diferentes, mas nenhuma delas funcionou, incluindo:

  • substitua os caracteres usando sed pela seguinte expressão - cat c_schools | sed 's/ĂĄ/á/g' > c_schools -, mas recebo um erro unterminated s command
  • abra o arquivo no VIM e corrija-o manualmente, mas o VIM não permite que eu digite os caracteres de verificação,
  • abra o arquivo no NANO e corrija-o manualmente, mas o NANO parece não conseguir trabalhar com o arquivo (o texto muda mesmo quando eu me movo com o cursor).

Como sugerido em um comentário, abri o arquivo no VIM novamente e experimente os seguintes comandos:

  • set encoding=utf-8 (este não teve nenhum efeito),
  • set termencoding=iso8859-2 (a saída é muito melhor depois desta, mas alguns caracteres ainda são exibidos incorretamente, como? em vez de è, ě ou š),
  • :set fileencoding (saídas fileencoding=utf-8 )

Quando copio o arquivo para minha máquina Windows via FTP e o abro no meu editor de texto padrão (Notepad ++), ele é exibido corretamente e a codificação usada é UTF-8, sem BOM.

    
por Dušan Rychnovský 22.06.2013 / 17:13

1 resposta

2

Parece que os dados Unicode (UTF-8) são exibidos como ISO-8859-2. Existem essencialmente duas possibilidades:

  1. Seu terminal usa o ISO-8859-2 como conjunto de caracteres de saída. Em seguida, os dados em si provavelmente são codificados corretamente, mas exibidos incorretamente: o que você vê é o resultado esperado quando você exibe dados UTF-8 como se fosse ISO-8859-2. Tente um terminal e / ou um editor que seja capaz de trabalhar com o UTF-8. (Não tenho certeza sobre o nano, mas o vim é capaz de trabalhar com o UTF-8 se você usar set encoding=utf-8 .)

  2. Seu terminal usa o UTF-8 como conjunto de caracteres de saída. Então os dados em si são codificados incorretamente: são dados que foram "convertidos" de ISO-8859-2 para UTF-8, embora já fossem dados UTF-8. Você pode usar iconv ou recode para traduzir UTF-8 de volta para ISO-8859-2 (ou melhor, "UTF-8 duplamente codificado" de volta para UTF-8 apropriado), por exemplo, por iconv -f UTF8 -t ISO_8859-2 yourinputfile .

Qual programa de terminal você usa e qual é a saída de echo $LC_CTYPE ?

    
por 23.06.2013 / 02:23

Tags