«

»

5月 28

テキストやCSVファイルのエンコード・BOM有り無しの変更方法

1. エンコード(文字コード)

テキストファイルやCSVファイルを読み込ませたとき、読み込んだ文字が文字化けする等、アプリケーションが期待通りの動作をしない、あるいはアプリケーションが停止したり異常動作をすることがあります。

その理由で一番多いのが、テキストやCSVファイルを保存した文字のエンコード(文字コード)が、アプリケーションの期待しているものではないケースです。

参考: Wikipedia 文字コード

歴史的由来から、日本国内で使われる文字コードは、シフトJISやEUC、ユニコード(UTF-8/UTF-16等)が混在しています。そのため、日本国内で開発されたソフトは、多くの場合自分で文字コードを判別して処理をすることが多いため、エンコードの違いが問題になることは少なめです。

しかし海外産、もしくは海外産ソフトを日本語化したソフトの場合、読み込むファイルがユニコードであることを前提としていることが多いため、そこにシフトJIS形式のファイルを読み込ませた場合、正常に動作しなくなるわけです。

対策としては、適当なアプリケーションやツールを用いてファイルのエンコードを変更することです。海外産ソフトの場合は、ユニコード(UTF-8)に変更することで正常に動作するようになるケースが多いですが、Excel(日本語版)などウインドウズソフトの場合はシフトJISを前提としているため、逆にユニコード形式では文字化けしてしまいます。この場合は逆にユニコードをシフトJISに変換して読み込ませます。

エンコードを変換する、つまりシフトJISをユニコード(UTF-8)に変更したり、その逆を行う方法はこのページ末尾の「変更方法」で述べます。

2. BOMつきユニコード

エンコードを変換しても問題が解決しないこともあります。場合によっては、ユニコード(UTF-8)形式のファイルが必要であることがわかっていて、ファイルをユニコード(UTF-8)に変換して読み込ませているのにも関わらず正常な動作をしないことがあります。

そうした場合に考えられるのが、BOMのある無しです。BOMとは、バイトオーダーマークの略で、読み方は「ボム」です。

BOMについて詳しく知りたい方は、Wikipediaの「バイトオーダーマーク」の項を御参照ください。

簡単に説明するとBOMとは、そのファイルがユニコードであることと、ユニコードの中でもどの種類であるかを示すマークです。ここまであいまいに説明してきましたが、ユニコードにはUTF-8やUTF-16、UTF-32などの種類があり、さらに同じ種類でも内部的なデータの並べ方に違いがあるのです。

そのためユニコードが導入されたころ、ファイルを扱うアプリケーションが簡単に判別できるように、ファイルの先頭にBOMと呼ばれるマークをつけることが行われました。BOMの中身は数バイトのバイナリコードです。

問題は、BOMをつけることが必須とはされてこなかったため、アプリケーションによってはBOMがついているために誤動作したり、逆にBOMがついていないために誤動作したりするケースがでてきたわけです。国産アプリケーションの場合、BOMのある無しは無視して、自分でファイルを判別することが多いため問題を起こすことは少ないのですが、例外もあります。

対策は、1の場合と同じく、適当なアプリケーションやツールを用いて BOM のある無しを変更することです。

3. エンコード(BOMあり・なし)の変更方法

ファイルのエンコードを変更する、あるいはBOMのある無しを変更するには以下の方法があります。

1) エンコードを指定して保存可能なエディタを使う。

プログラマ向けのエディタ、特に日本語化されたエディタは、通常、エンコードやBOM有りの指定ができます。秀丸やさくらエディタ、TeraPad、あるいは Vim(GVim)などです。こうしたエディタでファイルを開いた後、保存時のオプションでエンコードやBOMのある無しを指定できます。Windowsのメモ帳でもエンコードの変換だけは可能です。メモ帳を使った方法については(3)で説明します。

プログラマ向けエディタを使いこなすのは難しいですが、エンコード変換だけでしたらそれほど手間はかかりませんので、窓の杜などでダウンロードし、試してみると良いでしょう。

身の回りにプログラマやSEの方がいればそうしたエディタを使っていないか、尋ねてみましょう。

2) 専用ツールを使う。

身の回りにプログラマ向けエディタを使ってる人がいない、あるいは自分でインストールするのも面倒だという方は、テキストファイルのエンコードを判定し、簡単に変換できる専用のツールがあります。

専用ツールというと構える人もいるかもしれませんが、単機能に限られていますのでインストールも簡単で、操作に迷うことはありません。

お勧めは、その名も「文字コード判定&変換ツール.net」というツールです。窓の杜よりダウンロードできます。以下にそのインストール方法、使用方法を説明いたします。

窓の杜:文字コード判定&変換ツール.NET

上のページの指示に従い、”NonCodeNet.zip”というファイルをダウンロードします。そのファイルを解凍(もしくは「すべて展開」)し、解凍された”NonCodeNet”というフォルダを適当な場所( “Program Files”、もしあれば “Programa Files(x86)”あたりがお勧め)に移動し、フォルダ中の”NonCodeNet.exe”をダブルクリックして実行するだけです。よく使うようならショートカットをデスクトップに作っておけばよいでしょう。

ダブルクリックすると最初に次のようなダイアログがでるかもしれません。ここではこのまま「実行」とします。

まず文字コードを判定したいファイル、あるいは文字コードを変換したいファイルを選択します。右の赤い丸の「ファイル参照」をクリックして目的のファイルを選択するか、あるいはダイアログ下部のクリーム色のエリアに、エクスプローラから目的のファイルをドラッグします。

即座に判定結果が下図の青丸で囲ったところに表示されます。左側が文字コード、右側がBOMの有無です。判定だけが目的の場合はここで完了です。

変換したい場合は、下の赤丸の部分を設定します。判定部分と同様に、左側が文字コードの設定、右側がBOMの有無の設定です。

設定がすめば、右の青のボタンをクリックすれば変換されたファイルが保存されます。下のボタンは、元のファイルに上書きする場合、上のボタンは別名で保存する場合です。

3) Windowsの「メモ帳」を使う

Windows付属の「メモ帳」を使って文字コードを変更する方法です。「メモ帳」を使えば指定の文字コードで保存することが可能です。

ただし「メモ帳」でユニコード(UTF-8等)で保存すると必ずBOM有りになってしまいます。BOM無しが必要な場合は、(1)や(2)で解説した方法が必要です。

以下に、Excelで作成したCSVファイルを(BOM有り)ユニコード(UTF-8)で保存する方法を解説します。

まず最初にExcelで次のように、顧客名と電話番号だけの簡単なCSVファイル(“customer.csv”)を作ったとします。これをExcelでCSV形式で保管すると、エンコードはシフトJISとなります。

Excel自体では、CSVファイルをUTF-8で保管することはできません(

次に、保管した”customer.csv”を MS Windows付属の「メモ帳」で開きます。メモ帳は、Windowsの「スタート」ボタンの「すべてのプログラム」→「アクセサリ」の中にあります。

なお、「メモ帳」の「開く」は、拡張子”txt”のファイルしか表示しませんので、目的のフォルダを開いた状態でファイル名に直接”customer.csv”を入力します。

上が「メモ帳」で開いた上体です。ここで、「ファイル」メニューから「名前を付けて保存」を選びます。

「名前をつけて保存」ダイアログボックスの一番下に、下図のように「文字コード」のドロップダウンリストがありますので、そこから「UTF-8」を選択して「保存」ボタンをクリックします。

以上でファイルは UTF-8 で保存されました。最初に述べたように、メモ帳で保存した UTF-8 はBOM有りになりますのでご注意ください。

()例外として、一行だけのCSVファイルの場合、ユニコードテキスト(BOM有りUTF-8形式)で保管することが可能です。手順は、「名前をつけて保管」-「ファイルの種類」で「ユニコードテキスト(*.txt)」を選んで保管します。この場合、拡張子は強制的にtxtに変わりますので、手作業でtxtの部分をcsvに再度戻して保管するか、保管後にエクスプローラ上でcsvに戻します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>