このチュートリアルでは、文字エンコーディングの意味を説明し、コマンド ライン ツールを使用して、ある文字エンコーディングを使用するファイルを別のエンコーディングに変換する例をいくつか示します。最後に、Linux でさまざまな文字エンコーディングを使用しているファイルを UTF-8 エンコーディングに変換する方法を見ていきます。
バイナリデータを除いて、コンピューターは文字、数字、その他人間が理解できるものを理解して保存できないことはすでにご存知かもしれません。バイナリ ビットには、0 または 1、true または false、yes または no の 2 つの値しかありません。文字、データ、画像など、その他すべてのものは、コンピューター処理のためにバイナリ形式で表現される必要があります。
簡単に言えば、文字エンコーディングは、生の 0 と 1 を実際の文字に解釈するようにコンピューターに指示する方法です。これらの文字エンコーディングでは、文字は数値の文字列として表されます。
ASCII、ANCI、Unicode など、多くの文字エンコーディング スキームがあります。以下は ASCII エンコーディングの例です。
字符 二进制 A 01000001 B 01000010
Linux では、コマンド ライン ツール iconv を使用して、あるエンコーディングを使用しているテキストを別のエンコーディングに変換します。
file コマンドを使用し、-i または --mime パラメーターを追加すると、ファイルの文字エンコーディングを表示できます。このパラメーターを使用すると、プログラムは次の例のような文字列の mime (多目的インターネット メール拡張子) データを出力できます。 :
$ file -i Car.java $ file -i CarDriver.java
Linux でファイルのエンコーディングを表示する
iconv ツールは次のように使用されます:
$ iconv option $ iconv options -f from-encoding -t to-encoding inputfile(s) -o outputfile
ここで、-f または --from-code は入力エンコーディングを示し、-t または --to-エンコーディングは出力エンコーディングを指定します。
既存のエンコードされた文字セットをすべてリストするには、次のコマンドを使用できます:
$ iconv -l
既存のエンコードされた文字セットをすべてリストする
ファイルを ISO-8859-1 エンコードから UTF-8 エンコードに変換します
以下、あるエンコーディング スキームを別のエンコーディング スキームに変換する方法を学びます。次のコマンドは、ISO-8859-1 エンコードを UTF-8 エンコードに変換します。
次の文字が含まれている次のファイル input.file について考えてみましょう:
� � � �
まず、このファイルのエンコーディングを調べてから、ファイルの内容を調べます。最後に、すべての文字を UTF-8 エンコーディングに変換できます。
iconv コマンドを実行した後、次のように出力ファイルの内容と使用される文字エンコーディングを確認できます。
$ file -i input.file $ cat input.file $ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file $ cat out.file $ file -i out.file
Linux で ISO-8859-1 を UTF-8 に変換します
注: //IGNORE 文字列が出力エンコーディングの後に追加される場合、変換できない文字は変換されず、変換後にプログラムはエラー メッセージを表示します。
上記の例の出力エンコーディング (UTF-8//TRANSLIT) の後に文字列 //TRANSLIT が追加された場合、変換される文字は形式変換原則を使用しようとします。つまり、出力エンコード スキームで文字を表現できない場合、その文字は類似した形状の文字に置き換えられます。
また、文字が出力エンコーディングに含まれておらず解読できない場合、出力ファイルでは疑問符に置き換えられます。
複数のファイルを UTF-8 エンコーディングに変換します
トピックに戻ります。複数のファイル、または特定のディレクトリ内のすべてのファイルを UTF-8 エンコーディングに変換したい場合は、次のような単純なシェル スクリプトを作成し、encoding.sh という名前を付けます。
#!/bin/bash ### 将 values_here 替换为输入编码 FROM_ENCODING="value_here" ### 输出编码 (UTF-8) TO_ENCODING="UTF-8" ### 转换命令 CONVERT=" iconv -f $FROM_ENCODING -t $TO_ENCODING" ### 使用循环转换多个文件 for file in *.txt; do $CONVERT "$file" -o "${file%.txt}.utf8.converted" done exit 0
ファイルを保存すると、実行可能アクセス許可が追加されます。 。変換するファイル (*.txt) が配置されているディレクトリでこのスクリプトを実行します
$ chmod +x encoding.sh $ ./encoding.sh
重要: 特定の文字エンコーディングを別のエンコーディングに変換するなど、このスクリプトをより一般的なものにすることもできます。これを実現するには、FROM_ENCODING 変数と TO_ENCODING 変数の値を変更するだけです。出力ファイルのファイル名を「${file%.txt}.utf8.converted」に変更することを忘れないでください。
詳細については、iconv のマニュアル ページを確認してください。
$ man iconv
このガイドを要約すると、文字エンコーディングの概念を理解し、あるエンコーディング スキームを別のエンコーディング スキームに変換する方法を知ることは、テキストを処理するコンピュータ ユーザー、特にプログラマーにとって必須です。