Linuxでのファイル文字符号化フォーマットの検出と変換

4191 ワード

現在、多くの場合、私たちが遭遇した非英語文字ファイルはUTF-8符号化を使用しており、この場合、一般的にこれらのファイルの内容を表示しても問題はありません.しかし、中国語のGBK符号化やロシア語のCP 1251符号化など、UTF-8符号化されていないファイルに遭遇することがある.テキストファイルは一般的に自己符号化フォーマットの情報を持たないので、処理に多くの面倒をもたらす.本文はいくつかのLinuxコマンドを紹介してテキストファイルの符号化フォーマットを検出して変換する.

ファイルエンコーディングフォーマットの検出


encaコマンド名はExtremely Naive Charset Analyserの略で、この萌えの名前から見ると、ファイルの符号化フォーマットを検出するために使用できるはずです.

encaのインストール


Ubuntuでは、以下のコマンドでインストールできます.
apt-get install enca

使用方法


最も簡単な使用方法は次のとおりです.
# enca test.txt
Simplified Chinese National Standard; GB2312

上のtest.txtは中国語GB 2312コードを含むテキストファイルである.encaのドキュメントによると、運が良ければ、上記のように追加パラメータを追加することなく、ファイルの符号化フォーマットを検出することができる.私の経験から見ると、Linuxの言語設定は運に影響を与える要素です.上記の動作は、デフォルト言語が中国語であるLinuxでは、上記の結果と同様にファイルの中国語符号化フォーマットが正しく検出される.LInuxが英語にデフォルト設定されている場合、運はそれほどよくありません.
# enca test.txt
enca: Cannot determine (or understand) your language preferences.
Please use `-L language', or `-L none' if your language is not supported
(only a few multibyte encodings can be recognized then).
Run `enca --list languages' to get a list of supported languages.

encaのエラープロンプトに従って、検出するファイル言語を限定するために-Lのパラメータを提供する必要がある.
まず、現在のシステムでencaがサポートしている言語と対応する符号化タイプを見る必要があります.
# enca --list languages
belarusian: CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 KOI8-U
 bulgarian: CP1251 ISO-8859-5 IBM855 maccyr ECMA-113
     czech: ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
  estonian: ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic
  croatian: CP1250 ISO-8859-2 IBM852 macce CORK
 hungarian: ISO-8859-2 CP1250 IBM852 macce CORK
lithuanian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
   latvian: CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
    polish: ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK
   russian: KOI8-R CP1251 ISO-8859-5 IBM866 maccyr
    slovak: CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
   slovene: ISO-8859-2 CP1250 IBM852 macce CORK
 ukrainian: CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr
   chinese: GBK BIG5 HZ
      none:

私のテスト環境では、encaは以上の言語とコードをサポートしています.中国語はchinese: GBK BIG5 HZであることがわかります.そこで、以下のパラメータの組み合わせを試してみましょう.
# enca -L chinese test.txt
Simplified Chinese National Standard; GB2312

この時、encaは明確な答えを出した.
デフォルトでは、encaは、上記のSimplified Chinese National Standard; GB2312のような、読み取り可能な符号化フォーマット名を与える.場合によっては、iconvコマンドと組み合わせてファイル符号化を変換したいなど、他のコマンドやプログラムに結果を与えることを望んでいます.-iを追加して、encaに対応するプログラムの使用可能な符号化名を与えることができます.
# enca -i -L chinese test.txt
GBK

ファイルエンコーディングフォーマットの変換


ファイルの正しい符号化フォーマットを知ると、ファイルをUTF 8のような一般的な符号化フォーマットまたはシステムのデフォルトでサポートされている符号化フォーマットに変換して、後続の処理を行うことが望ましいことが多い.

encaを使用して変換


encaコマンドに-xパラメータを追加すると、encaコマンドはファイルを-xパラメータで指定された符号化フォーマットに変換します.
# enca -L chinese test.txt
Simplified Chinese National Standard; GB2312
# enca -x UTF8 -L chinese test.txt
# enca -L chinese test.txt
Universal transformation format 8 bits; UTF-8
enca -x UTF8 -L chinese test.txtのコマンドを実行すると、ファイルtestが表示される.txtの符号化はGB 2312からUTF 8に変換する.注encaコマンドはソースファイルを上書きするので、このコマンドを使用する場合は、ソースファイルのバックアップに注意してください.

iconvを使用して変換


iconvは*nixシステムの変換文字符号化の標準コマンドとAPIである.1つのGBK符号化されたファイルをUTF 8符号化に変換する場合は、iconvコマンドを使用します.
# iconv -f GBK -t UTF8 test.txt

ここで、test.txtは変換対象のファイルである、-f GBKのパラメータはソースファイルの符号化がGBKである、-t UTF8は変換対象の符号化を示す.以上のコマンドを実行すると、iconvコマンドは変換後のファイル内容を標準出力に印刷する.
変換されたコンテンツをファイルに保存する場合は、-oパラメータを追加します.
    # iconv -f GBK -t UTF8 -o test_converted.txt test.txt 

このコマンドは変換された内容をtest_に自動的に保存します.converted.txtファイルiconv -lにより、すべての文字セット名を表示することができる.前述enca -iは、iconvで利用可能なファイル符号化名を出力するためにも用いることができる.

参考資料

  • enconv(1) - Linux man page
  • wiki - iconv
  • libiconv