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

ファイル:utf-8、コンソール:utf-8

Ruby

#!/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
あいうえお

Perl

#!/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
あいうえお


Python

#!/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
あいうえお