• 締切済み

perlで全ての文字コードをeucJPで扱う

ネットで検索しながら、表題のことをやろうとしているのですがうまくいきません。 やりたいことは、eucJPのファイルを読み込み、必要な分だけを整形して取り出し eucJPのファイルとして出力したいです。(少し追記も必要です) 根本的なところが理解できていないので、困っているのですが、 以下のようなコードを組み合わせて試してみています。 use encoding "euc-jp" binmode STDERR, ":encoding(euc-jp)"; (STDINとかSTDOUTも指定してみたりしました) perlを使う場合には、cat input.txt | hoge.pl > output.txtとしています 環境は、Ubuntuを使っていて、perlのバージョンは5.10.0となっています。 なにかアドバイスか参考URLあればお願い致します。

  • Perl
  • 回答数2
  • ありがとう数1

みんなの回答

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.2

Perl5.8ぐらいだと、文字コード変換モジュールが標準で添付されているからそれを使えば。 <http://perldoc.perl.org/Encode.html>

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

なにで困っているのか想像もつかないのだが, Encode::encode/Encode::decode でいいんじゃないの?

関連するQ&A

  • Perlの文字コード

    1-2年ほど前、Perl5.8でソース自体をUTF8N(LF)で記述するようになり、 以下のように書いていました。 use utf8; use encoding "utf8"; use Encoding; それからPHPに移り、PHPでは、ソースはEUC-JP、DBもEUC、HTMLに出力する際もEUC-JPで統一していました。 最近またperlを使い出して疑問に思ったのですが、 perlではどのような文字コードで統一すれば一番よいのかということです。 javascriptはUTFだと動作しない端末(ザウルス)などあり、 perlもEUC-JPで統一しようと考えています。 昔、UTF8にこだわったのは、おそらく 「構」という文字は5Cなので、 文字コードによる不具合(ソース,js,cssで)を避けるためと、流行のUTF8にしたと思います。 perlでEUC-JPで文字コード統一させるメリットデメリットが知りたいです。 最近perlで書かれたサイトでHTML出力がShift_JISだったのですが、perlソースもシフトJISかは知りませんが、Shift_JISで統一するデメリットが知りたいです。 あと、WEBでどの文字コードが現在主流で、今後どうなるかも知りたいです。 EUC-JPで安泰なら、話は早いですが・・・

    • ベストアンサー
    • Perl
  • htmlとperlを記述する時の文字コードについて

    今からホームページを作成するところです。 やりたいこととして、 1.html全体はShift_JISで記述 2.Shift_JISのtxtファイルから検索をかけて該当レコードを表示させるページをperl(CGI)でhtmlとして出力 この場合perlはShift_JISで記述すると問題があるでしょうか? CGIでtxtファイルを操作したとき内部ではeuc-jpで扱われる為、入出力の際にはjcodeなどを使った相互変換が必要になるとか思いますが、こちらの問題は取りあえずおいておきます。 perl自体はやはりeuc-jpで記述すべきでしょうか? htmlも含めて全てeuc-jpで記述すれば問題ないかと思うのですが今後の参考の為に聞いておきたいと思い質問させて頂いております。 また、上記のやりたいことを実現するのにperl以外のもっと良い方法があればご紹介頂ければ幸いです。 何卒よろしくお願い致します。

    • ベストアンサー
    • Perl
  • perlで辞書データを置換

    perl超初心者です。 初めて組んで行き詰りました。 辞書データから不必要なものを取ろうと 思いましたが、いきなり[ファイルを開く] で止まってます。 以下がそうです。 use utf8; binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; open(DIC, "+<", "pdic2csv.csv") or die("Error:$!"); @array = <DIC>; $a = ~ s|" / "|"_"|g; @array = ("\,","\\","\s",1,2,3); $a = ~ s/1,2,3/"_"/g; $a = ~ s|" /// "|"\,"|g; close(DIC) ----------------- 使う辞書データは以下です。 うつる /// 건너다 / [綴り]ㄱㅓㄴㄴㅓㄷㅏ うつわ /// 그릇 / 그릇は,(~)杯, \ cf. 잔 うで /// 팔 よろしくお願いします。

  • 標準出力と標準エラー出力を時系列にファイルへ

    例として、perlなどで、(test.plとします)  print "stdout1\n";  print STDERR "STDERR1\n";  print "stdout2\n";  print STDERR "STDERR2\n";  print "stdout3\n";  print STDERR "STDERR3\n"; このように、標準出力と、標準エラー出力が混在した状態の処理があった場合、 コマンドプロンプト(Windows2000)にて、 C:\>test.pl とすると、 stdout1 STDERR1 stdout2 STDERR2 stdout3 STDERR3 のように時系列に出力されますが、これをログファイルに取ろうとして、 C:\>test.pl 1>log.txt 2>&1 とすると、 C:\>cat log.txt STDERR1 STDERR2 STDERR3 stdout1 stdout2 stdout3 のように、標準エラー出力が先に吐き出されてしまいます。 これを画面出力時と同様に時系列で取れるようにしたいのですが、どのようにすれば良いでしょうか? 単純なことで困っています。よろしくお願いします。

  • Data::Dumper;でダンプ後表示した文字列\x{30fc}...

    お世話になります。 下記のスクリプトを使ってrssファイル内をuse Data::Dumper;でダンプして表示してみたのですが、rssファイルがutf8で記述されているせいか 表示時に日本語の所が\x{30fc}のような文字列になってしまいます。 これをshiftjisで表示させたいのですが、試行錯誤してもうまくいきません。 どなたかご教授いただけませんでしょうか。 #!/usr/bin/perl BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); } use XML::RSS; use Data::Dumper; my $rss = new XML::RSS; #表示形式の違いで1と2がある。 $Data::Dumper::Indent = 1; use open IN => ":utf8"; # 入力をUTF8とする use open OUT => ":shiftjis"; #use open ":std"; #use Encode; #use encoding 'shiftjis', STDIN=>'utf8', STDOUT=>'sjis'; #binmode STDOUT, ":encoding(utf-8)"; #binmode STDOUT, ":encoding(shiftjis)"; #binmode STDOUT, ":encoding(euc-jp)"; #use open ":encoding(shiftjis)"; # rssをセット。 open my $fh, '< ./test.rss'; my $text = join undef, <$fh>; close $fh; # rssをパース $rss->parse($text); # ひとまず中見を知る為にダンプしてみる print "Content-type:text/html;charset=Shift_JIS\n\n"; print "<html><head>\n"; print "<title></title></head>\n"; print "<body>\n"; print Data::Dumper->Dump([$rss]);

    • ベストアンサー
    • Perl
  • Perlの文字コードを意識したファイルの読み込み方

    perl5.8でファイルを読み込む場合、文字コードを意識した以下のような呼び方("<:euc-jp")があるのですが この方法で読み込んだ$datの中身はperlの内部コード(UTF8)になっているということでしょうか? それとも、普通に("<")で読み込んで$dat = Encode::decode("euc-jp", $dat);とすべきでしょうか? use utf8; use Encode; my $fname = "test.txt"; # 文字コードがEUC-JP my $dat = ""; open(IN, "<:euc-jp", "$fname) or die "open error!"; flock(IN, 2); while(<IN>){ $dat .= $_; } close(IN);

    • ベストアンサー
    • Perl
  • initdbの文字コードと違う文字コードでDB作成

    postgres9.0.4でEUCでinitした環境があります。 initdb --encoding=EUC_JP そこにUTF8のDBを作成したいのですが、以下のようなエラーがでます。 psql -U postgres postgres=# CREATE DATABASE dbname postgres-# WITH ENCODING='UTF8' postgres-# OWNER=dbowner postgres-# CONNECTION LIMIT=-1; ERROR: encoding UTF8 does not match locale ja_JP.eucJP DETAIL: The chosen LC_CTYPE setting requires encoding EUC_JP. 既に運用が始まっているEUCのDBが稼動している状態です。 EUCで初期化したところに後からUTF8のDBを作成する方法はないのでしょうか?

  • 標準出力/標準エラー出力を時系列にファイルへ

    画面への文字出力が、標準出力(stdout)と標準エラー出力(stderr)の 両方もつような、コンソールアプリ(exe形式)のツールを動作させたときに、 画面上には、 stdout1 STDERR1 stdout2 STDERR2 stdout3 STDERR3 のような順番で処理順にメッセージが出るのですが、 これをファイルに落とそうとして、  C:\>hoge.exe 1> log.txt 2>1& とすると、log.txtの中身が、 C:\>type log.txt STDERR1 STDERR2 STDERR3 stdout1 stdout2 stdout3 のような標準エラー出力が先に吐き出される順番になってしまっています。 これを、exe実行前に、MS-DOSとして何らかの設定を行うことで、 ファイルに落とした時も、出力された文字が時系列に保存されるように する方法はあるでしょうか? よろしくお願いします。

  • perl5.8.6日本語の置換について

    教えてください。perl5.8.6の日本語処理で行き詰まっています。 下記のプログラムをeuc-jpで書いて動作させたところ、s///gの 置換がうまくいきません。 何か間違っているのでしょうか。 weather.pl --------------------------- #! /usr/bin/perl # 使い方: # require "weather.pl"; # $data=weather; use LWP::Simple; use strict; use encoding 'euc-jp'; use Encode qw/from_to/; binmode STDERR,"encoding(euc-jp)"; sub weather{ my $doc; my $adrs = "http://www.jma.go.jp/JMA_HP/jp/warn/text/27.html"; until($doc){ $doc = get "$adrs"; } from_to($doc,'shiftjis','euc-jp'); $doc =~/<tr><td><pre>(.+)<\/pre><\/td><\/tr>/s; $doc = $1; $doc =~s/」/ /g; $doc =~s/パーセント/%/g; $doc =~s/[0-9]/[0-9]/g; $doc; } 1; my $result=weather; print "$result\n"; ---------------------------

    • ベストアンサー
    • Perl
  • Python os.system 日本語ファイル名 文字化け

    python2.6 ubuntu 9.04 x64 ファイル文字コード UTF-8 # -*- coding: UTF-8 -*- import os, sys command = 'echo "あいうえお" > あああ.txt' os.system (command) このようにファイル出力すると、_____.txt と出力されます。 どのように解決するのでしょうか 直接 echo "あいうえお" > あああ.txt' とコマンドを打った場合は日本語ファイルが作成されます。 print sys.getfilesystemencoding() print sys.stdin.encoding print sys.stdout.encoding print sys.stderr.encoding print sys.getdefaultencoding() >UTF-8 >UTF-8 >UTF-8 >UTF-8 >ascii