2010-03-07 5 views
4

J'ai un fichier de vidage SQL constitué de texte en cyrillique russe incorrectement (WINDOWS-1251), exemple Èðàíñêèå qui devrait être correctement affiché comme Иранские.Comment puis-je convertir cyrillique stocké sous LATIN1 (sql) en vrai UTF8 cyrillique avec iconv?

Dans le passé, j'ai réussi à convertir le fichier SQL, mais la mémoire échoue dans ce que j'ai fait et dans quel ordre.

Logiquement, il serait logique que, comme il est stocké dans LATIN1 je convertirais de LATIN1 en WINDOWS-1251, puis de WINDOWS-1251 en UTF-8 // TRANSLIT ou quelque chose comme ça.

Jusqu'à présent, j'ai essayé:

1.

iconv -f WINDOWS-1251 -t UTF-8//TRANSLIT -o new.sql snippet.sql 

Sortie:

Èðàíñêèå (pas ce que je veux)

2.

iconv -f LATIN1 -t UTF-8//TRANSLIT -o new.sql snippet.sql 

Outp ut:

Ã<88>ðàíñêèå (pas ce que je veux soit)

Remarques

  • Il est possible que je pourrais avoir converti une fois, puis deux fois pour obtenir mon résultat souhaité, mais je suis assez Bien sûr que sur la dernière étape je suis passé de WINDOWS-1251 à UTF-8//TRANSLIT comme cela a été écrit dans mes notes.

  • Une autre note est que je regarde Èðàíñêèå dans le fichier SQL lorsque le codage du fichier est utf8 (natif dans vim). Si je fais set enc=latin1 dans vim alors je vois ~Hð| íñêèå comme si cela ne le rend pas plus confus.

Répondre

5
iconv -f utf-8 -t latin1 < in.sql | iconv -f cp1251 -t utf-8 > out.sql 
+0

Impressionnant - merci. Bien que je devais remplacer environ ~ 40-50 caractères UTF8 avec une chaîne temporaire indiquant le point hexadécimal Unicode, car iconv ne pouvait pas traiter sans ceux-ci, cela a fonctionné. –

+3

En fait, il semble que j'ai oublié de spécifier '// TRANSLIT' dans l'iconv initial, j'aurais dû le faire à la place. –

Questions connexes