Comment changer l'enencoding du text ASCII étendu non-ISO, avec des terminaisons de ligne CRLF en UTF-8?

J'ai un file txt:

$ file -i x.txt x.txt: text/plain; charset=unknown-8bit $ file x.txt x.txt: Non-ISO extended-ASCII text, with CRLF line terminators 

Et il y a des caractères qui sont incorrectement encodés:

 trwa³y, sta³y, usuwaæ 

Comment puis-je modifier l'enencoding de ce file en UTF-8? J'ai essayé la façon suivante jusqu'à présent:

 $ iconv -f ASCII -t UTF-8 x.txt puiconv: illegal input sequence at position 4 

Peut-être que je devrais utiliser en quelque sorte extended ASCII ( extended ASCII high ASCII ), mais ne peut pas le find dans la list d'enencoding de iconv .

file vous indique "Texte ASCII étendu non ISO" car il détecte que c'est:

  • probablement un file "text" à cause de l'absence de caractères de contrôle (valeurs d'octet 0 à 31) autres que les sauts de ligne;
  • "Extended-ASCII" car il y a des caractères en dehors de la plage ASCII (valeurs d'octets ≥128);
  • "Non-ISO" parce qu'il y a des caractères dans la gamme 128-159 ( ISO 8859 réserve cette gamme pour les caractères de contrôle).

Vous devez savoir quel encoding ce file semble être. Vous pouvez essayer la reconnaissance automatique d' Enca . Vous pourriez avoir besoin de le pousser dans la bonne direction en lui disant dans quelle langue le text est.

 enca x.txt enca -L polish x.txt 

Pour convertir le file, passez l'option -x : enca -L polish x.txt -x utf8 >x.utf8.txt

Si vous ne pouvez pas ou ne voulez pas utiliser Enca, vous pouvez deviner l'enencoding manuellement. Un peu de regard autour de moi m'a dit que c'est du text polonais et que les mots sont trwały, stały, usuważ, donc on cherche une traduction où ³ł et æż . Cela ressemble à latin-2 ou latin-10 ou plus probable (donné "non-ISO" CP1250 que vous visualisez en tant que latin 1. Pour convertir le file en UTF-8, vous pouvez utiliser recode ou iconv .

 recode CP1250..utf8 <x.txt >x.utf8.txt iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt 

Avez-vous essayé de savoir quel encoding exact est x.txt? Vous obtiendrez une list des encodings pris en charge avec

iconv –list

Parfois, il arrive à moi que je reçois un décalage entre latin1 et utf8. Ensuite, il est souvent utile de le convertir et de revenir à utf8 et vice versa.

Ouvrez le file text avec gedit et dans la boîte de dialog "Enregistrer sous .." vous verrez l'enencoding actuel.

J'ai créé un script de conversion automatisé en utilisant la bibliothèque enca , je l'utilise sur mon NAS pour convertir les sous-titres en UTF-8 mais il pourrait être utilisé pour toute conversion automatique

N'hésitez pas à utiliser 🙂

MODIFIER:

 #!/bin/bash LANGUAGE=czech TO=utf8 CONVERT="enca -L $LANGUAGE -x $TO" # Find and onvert find ./ -type f -name "*.srt" | while read fn; do IS_TARGET=`enca "${fn}" | egrep -ow -m 1 'UTF-8|Unrecognized|KOI8-CS2|7bit ASCII|UCS-2|Macintosh Central European'` if [ "$IS_TARGET" != "UTF-8" ] && [ "$IS_TARGET" != "UCS-2" ] && [ "$IS_TARGET" != "Macintosh Central European" ] && [ "$IS_TARGET" != "Unrecognized" ] && [ "$IS_TARGET" != "7bit ASCII" ] && [ "$IS_TARGET" != "KOI8-CS2" ]; then echo "${fn} ---- Will be converted!" # optional backup of original srt # cp "${fn}" "${fn}.bak" $CONVERT "${fn}" fi done