私は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
そして、正しくエンコードされていない文字がいくつかあります:
trwa³y, sta³y, usuwaæ
このファイルのエンコーディングをUTF-8に変更するにはどうすればよいですか?これまでに次の方法を試しました:
$ iconv -f ASCII -t UTF-8 x.txt
puiconv: illegal input sequence at position 4
たぶん私はどういうわけかextended ASCII
(high ASCII
)を使用するべきですが、iconv
のエンコーディングリストでそれを見つけることができません。
file
は、次のことを検出するため、「非ISO拡張ASCIIテキスト」を通知します。
このファイルがどのエンコーディングにあると思われるかを把握する必要があります。 Enca の自動認識を試すことができます。テキストがどの言語であるかを伝えることで、正しい方向に微調整する必要がある場合があります。
enca x.txt
enca -L polish x.txt
ファイルを変換するには、-x
オプションを渡してください:enca -L polish x.txt -x utf8 >x.utf8.txt
Encaを使用できない場合、または使用したくない場合は、手動でエンコーディングを推測できます。少し見回すと、これはポーランド語のテキストであり、単語はtrwały、stały、usuważであるため、³
→ł
およびæ
→ż
の翻訳を探しています。これは latin-2 または latin-1 またはより可能性が高い(「非ISO」の場合) CP125 として表示- latin1 。ファイルをUTF-8に変換するには、 recode または iconv を使用できます。
recode CP1250..utf8 <x.txt >x.utf8.txt
iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt
Geditでテキストファイルを開き、[名前を付けて保存]ダイアログで現在のエンコーディングを確認します。
X.txtの正確なエンコーディングを見つけようとしましたか?サポートされているエンコーディングのリストが表示されます
iconv --list
Latin1とutf8の不一致が発生することがあります。次に、utf8への変換とutf8への変換、およびその逆の変換が役立つことがよくあります。
enca ライブラリを使用して自動化された 変換スクリプト を作成しました。これをmy NASで使用して字幕をUTF-8に変換しますが、自動変換に利用できます
自由に使ってください:)
編集:
#!/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