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:
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