Iconvを使用したUTF-16LEからUTF-8への変換
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ツールを使用してファイルを別のエンコード形式に変換する方法を学習しました。