1. 概要

まず、コンピューターがデータを解釈する方法から始めましょう。 コンピューターはバイナリシステムの規則のみを理解します。つまり、すべての情報が変換されてバイナリ形式で保存され、表示中に人間が読める形式に再変換されます。 人間の言語の文字をバイナリシーケンスに変換するこのプロセスは、エンコーディングと呼ばれます。

ASCII、 UTF-16LE、UTF-8は、一般的に使用されるエンコード方式に他なりません。 利用可能なエンコード方式はさまざまであるため、ターゲットシステムに応じてファイルエンコード形式を交換する必要があると感じることがよくあります。

このチュートリアルでは、iconvツールを使用して任意のLinuxシステムでエンコード形式を変換する方法を学びましょう。

2. 任意のファイルのエンコード方式を確認する方法

iconv ツールは、データをあるエンコード方式から別のエンコード方式に変換します。 ファイルのエンコードスキームを変換する前に、最初のステップは、現在のエンコードスキームを識別し、ターゲットとソースの両方のエンコードスキームがiconvツールと互換性があることを確認することです。

まず、特定のファイルのエンコード形式を確認する方法を学びましょう。 file ユーティリティは、ファイルのプロパティを決定するのに役立ちます。 任意のファイルのエンコード方式を識別するには:

$ file -i test.csv
test.csv: text/plain; charset=utf-8

3. サポートされているエンコーディングスキームのリスト

エンコード方式の変換を学習する前に、iconvツールでサポートされているすべてのエンコード方式を確認する方法を学習しましょう。 iconv-lまたはiconv–list には、サポートされている一連のエンコードスキームが一覧表示されます。

$ iconv -l
437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,
...
CP920, CP921, CP922, CP930, CP932, CP933, CP935, CP936, CP937, CP939, CP949

結論として、変換する前に、ターゲットとソースのエンコーディングスキームがiconvツールと互換性があることを確認する必要があります。

4. 任意のファイルのエンコーディングスキームの変換

最後に、特定のファイルのエンコード方式を変換する方法を学びましょう。 (ファイルツールを使用して)現在のエンコードスキームを見つけ、ターゲットとソースの両方のエンコードスキームが iconv ユーティリティと互換性があることを確認した後、実際の変換のこのステップに進みます。 UTF-16LEでエンコードされたファイルをUTF-8に変換する手順は次のとおりです。

まず、ファイルの入力エンコーディングスキームを見つけます。

$ file -i input.csv 
input.csv: text/plain; charset=utf-16le

次に、ターゲット(UTF-8)とソースエンコーディングスキーム(UTF-16LE)の両方がiconvツールと互換性があることを確認しましょう。

$ iconv -l | grep -i utf-16le 
UTF-16LE// 
$ iconv -l | grep -i utf-8 
ISO-10646/UTF-8/ 
UTF-8//

最後に、入力ファイルをターゲットのUTF-8形式に変換し、結果ファイルのエンコードスキームを確認します。

$ iconv -f utf-16le -t utf-8 input.csv -o result.csv
$ file -i result.csv result.csv: text/plain; charset=utf-8

5. 入力および出力エンコーディングフォーマット入力

iconv ツールには、ソースのエンコード形式( -f オプションを使用)とターゲットのエンコード形式( -i オプションを使用)が必要です。

-fオプションと-iオプションの両方がない場合、出力ファイルは変換を実行せずに単に入力ファイルになります。

$ file -i test.csv 
test.csv: text/plain; charset=utf-8
$ iconv test.csv -o result.csv
$  file -i result.csv 
result.csv: text/plain; charset=utf-8
$ diff test.csv result.csv

-i オプションがない場合、 iconv ツールは入力ファイルのエンコード形式を認識し、それをターゲットのエンコードスキームに変換します。

$ iconv -t utf-16le test.csv -o result.csv
$ file -i result.csv 
result.csv: text/plain; charset=utf-16le

つまり、 from-encoding パラメーターがない場合、デフォルトは現在のロケールの文字エンコードから派生します。 同様に、 to-encoding パラメーターがない場合、デフォルトは現在のロケールの文字エンコードから派生します。

6. 出力のリダイレクト

標準出力はデフォルトの出力オプションです。

$ iconv -t utf-16le test.csv
��,,,
,,,
,,,
EMPLOYEE CLAIM FORM,,,
,,,
LEAVE TRAVEL ALLOWANCE,,,
,,,
,,,
,,,
,,,
SL.NO.,PARTICULARS,,REMARKS

出力をファイルに送るには、次の方法があります。 pipe コマンド(または-oオプション)を使用したリダイレクト:

$ iconv -t utf-16le test.csv > result.csv
$ cat result.csv 
��,,,
,,,
,,,
EMPLOYEE CLAIM FORM,,,
,,,
LEAVE TRAVEL ALLOWANCE,,,
,,,
,,,
,,,
,,,
SL.NO.,PARTICULARS,,REMARKS

7. 無効な文字を省略します

入力ファイルには、メモリの破損または不適切な転送が原因で、無効な文字が含まれている可能性があります。 このような場合、 -c オプションを使用して、iconvツールに無効な文字を無視するように指示できます。

$ cat input_invalid 
hi😀😀This is not a valid char
$ iconv -f us-ascii -t utf-8 input_invalid -c -o output
$ cat output 
hiThis is not a valid char

上記は、 iconv ツールがすべての有効な文字を完全に変換し、無効な文字のみを無視することを示しています。

8. 結論

この記事では、ファイルのエンコード方式を確認し、iconvツールを使用してファイルを別のエンコード形式に変換する方法を学習しました。