Ruby,Perl,Pythonのメモ〜文字コード指定してファイル読み込み〜
メモ:
・日本語の取り扱いのめも その2(ファイルオープンについて)
・バージョンはruby 1.9.1p129,perl v5.10.0,Python 3.0.1
ruby | perl | python | |
---|---|---|---|
オープン | File.open(filename,"r:<ファイルの文字コード>:<プログラム内の文字コード>") | open $fh, "<:encoding(<ファイルの文字コード>)", $filename | f = codecs.open(filename,"r",<ファイルの文字コード>) |
メモ | ファイルの文字コードと取得する文字列の文字コードを指定する ファイルの文字コードのみを指定するとその文字コードの文字列を得る ファイルの文字コードとプログラム内の文字コードを同一に指定するとwarningが出る |
ファイルの文字コードを指定して、utf8フラグ付きの文字列を得る | ファイルの文字コードを指定してUnicode文字列を得る |
current ├├UTF-8.file └eucJP.file
#!/usr/bin/ruby1.9 # coding: utf-8 filename, encoding = "UTF-8.file", "UTF-8" puts "filename " + filename + " encoding " + encoding File.open(filename,"r:#{encoding}"){|f| data = f.read print data } filename, encoding = "eucJP.file", "eucJP" puts "filename " + filename + " encoding " + encoding File.open(filename,"r:#{encoding}:#{Encoding.locale_charmap}"){|f| data = f.read print data }
結果
filename UTF-8.file encoding UTF-8 あいうえお filename eucJP.file encoding eucJP あいうえお
#!/usr/bin/perl use strict; use warnings; use utf8; my ($filename,$encoding) = ("UTF-8.file","UTF-8"); printf "filename=%s,encoding=%s\n", $filename, $encoding; open my $fh, "<:encoding($encoding)", $filename or die "error!! file:$filename msg:$!"; my $data = do { local $/; <$fh> }; binmode STDOUT => 'utf8'; print $data; close $fh; ($filename,$encoding) = ("eucJP.file","eucJP"); printf "filename=%s,encoding=%s\n", $filename, $encoding; open $fh, "<:encoding($encoding)", $filename or die "error!! file:$filename msg:$!"; $data = do { local $/; <$fh> }; binmode STDOUT => 'utf8'; print $data; close $fh;
結果
filename=UTF-8.file,encoding=UTF-8 あいうえお filename=eucJP.file,encoding=eucJP あいうえお
#!/usr/local/bin/python3.0 # /usr/bin/python3.0 # -*- coding: utf-8 -*- import codecs filename, encoding= "UTF-8.file", "UTF-8" print("filename " + filename + " encoding " + encoding) f = codecs.open(filename,"r",encoding) data=f.read() print(data, end='') f.close filename, encoding= "eucJP.file", "eucJP" print("filename " + filename + " encoding " + encoding) f = codecs.open(filename,"r",encoding) data=f.read() print(data, end='') f.close
結果
filename UTF-8.file encoding UTF-8 あいうえお filename eucJP.file encoding eucJP あいうえお