トップページ >  perl >  CSVやTSVファイルの文字コードをUTF-8に変換
初版2012/02/29: 最終更新日2012/02/29
CSVやTSVファイルの文字コードをUTF-8に変換
目次
概要
使用モジュールのインストール
TSVファイルの文字コードをUTF-8に変換
概要
CSVやTSVファイルとして保存してあるファイルを、データベースへ登録するために、
Perlにて文字コードを変換し、PostgreSQLへ登録する。

前提として、入力元のCSVやTSVファイルの文字コードが判明している事が必要である。(今回はEUC-JP)
Perl5.8以上では文字コードを扱うモジュールとして Encode.pm が登場しました。
今回はこちらを利用する場合を想定して記載します。

また、環境はLinux上での作業とします。
使用モジュールのインストール
使用するモジュールがインストールされている事を確認します。

shell> perl -MEncode

このように入力し、エラーが出なければモジュールがインストールされています。
(入力待ち状態となりますので、 Ctrl + c や Ctrl + d で抜けてください)

インストールされていない場合は、下記のようなエラーが出力されます。


Can't locate Encode.pm in @INC (@INC contains: /usr/lib/perl5/si......


インストールされていた方は、この章を読み飛ばして結構です。


それでは、Encode.pm のインストールを開始します。
インストールは、Perl のモジュール群が登録されているCPANから行います。


最近では、CPANからのインストールを扱いやすくした「cpanm」なども出ていますが、
ここではデフォルトの cpanコマンドを用いてインストールします。

rootユーザになります

shell> su -


cpan コマンドを入力します
shell# cpan

そうすると、cpanシェルが立ち上がり下記のような画面が表示されます。

cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')

cpan>


cpanシェルにて Encodeモジュールをインストールします。

cpan> install Encode

インストールが成功すると、最後に下記のように表示されます。

/usr/bin/make install -- OK


これでインストールは完了します。
TSVファイルの文字コードをUTF-8に変換
基本的なPerlでのファイル入出力の扱い説明は省略します。
文字コードの変換には Encode.pm を使用します。
ドキュメントは、コマンドライン上で perldoc Encode と入力する事で読む事が出来ます。


encode('utf8', decode('euc-jp', $input));

入力の文字コードが分かっている場合は、この方法で文字コードを変換出来る。
(文字の判別はミスする可能性もあるため、入力元の文字コードは分かっている方が望ましい)


具体的に、ファイルを読み込み出力するには下記のようにする。




#/usr/bin/perl
#
use strict;
use Encode;

my @inputdata;
my $file = 'ファイルのパス';

open(IN, $file) or die $!;
@inputdata = ;
close(IN);

for (@inputdata) {
my $line = encode('utf8', decode ('euc-jp', $_) );

# 入力値に対して何か処理をしたい場合はここで行う

print $line;
}

# 入力値をまとめてから処理したい場合は、
# 上記で print せず、
# 配列などにデータをためてから処理を行う。