utf-8のコードを使ったPerlの改良方法

このQ&Aのポイント
  • 他の人が作ったPerlを改良する際に、半角ひらがなの文字を取得する方法について説明します。
  • 現在のコードでは英数字の場合は正常に取得できますが、半角ひらがなが入ると取得できない問題があります。
  • コードの右辺を変更することで、半角ひらがなも正常に取得できるようにすることができます。また、エンコードとしてutf-8を使用することも可能です。
回答を見る
  • ベストアンサー

utf-8のコードを使いたい

素人で大変申し訳ございません。 他の人が作ったPerlを改良しようと思っております。 仕様は、csvのカンマからカンマの間に入っている 文字を取得するというのですが、 英数字の場合は、正常に取得できるのですが、 半角ひらがなが入ると文字の取得ができません。 下記の$outputで、私が必要な情報を得ようと思っているのですが、 下記の右辺をどのように変えれば、半角ひらがなも取得できるでしょうか? $output =~ s|/\*\s(([A-Z0-9_])+)\s\*/|$D->{$1}|g; ※エンコードが必要でしたら、utf-8を使いたいと思っています。 一部分の大変失礼な質問と思いますが、何卒よろしくお願い致します。

  • Perl
  • 回答数8
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • siteyuh
  • ベストアンサー率21% (7/33)
回答No.3

UTF-8を使うのであれば、 Jcode.pm を使うといいと思います。

kgyqk433
質問者

お礼

本当に素人で申し訳ございません、「全角ひらがな・漢字を使いたい」の間違いでした 何卒よろしくお願い致します。

その他の回答 (7)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.8

繰り返しますが、CSVはアプリケーション依存です。様々なフォーマットがあります。 1) ,,間に,があるとき\,でエスケープする 2) ,,間に日本語があるときは全体を""で囲む 3) ,,間に"があるときは\でエスケープする  などがあると思います。  それらがわからないと正規表現は書けません。 詳しくは、 CSV形式の行から値のリストを取り出す ( http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values ) 以降の記事をお読みください。

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.7

あなたが行いたいことは本当に「csvのカンマからカンマの間に入っている文字を取得する」なのでしょうか? >$output =~ s|/\*\s(([A-Z0-9_])+)\s\*/|$D->{$1}|g; の右辺は正規表現部分は、カンマ~カンマの間をあらわすようなものではないですけど。 ぱっと見、 "/*空白文字"~"空白文字*/"で囲まれたアルファベット大文字・数字・アンダーバーで 構成された文字列 なのですが。

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

「文字の取得ができない」というのは, 具体的にはどのような入力に対してどのような結果を期待しているところでどのような答えになってしまうのですか? あと, $output =~ s|/\*\s(([A-Z0-9_])+)\s\*/|$D->{$1}|g; は何を意図しているのですか? 「csvのカンマからカンマの間に入っている文字を取得する」こととの関連性が見えないのですが. できればファイルのオープンとか読み込みの部分も見たいねぇ.

  • namboku
  • ベストアンサー率50% (2/4)
回答No.5

「半角ひらがな」を含む入力ファイルというのは、一般にはないと思いますが、どのようなエンコードでしょうか? 半角カタカナであれば、入力ファイルのエンコードは特に気にする必要はないと思います。 「csvのカンマからカンマの間に入っている文字を取得する」ということは「カンマを区切り文字と考えて、カンマの間にある文字や数字を取り出す」ということであれば、split関数が使えます。 例えば、入力ファイル(input.csv)が ABC,アイウエオ,10000 DEF,カキクケコ,20000 GHI,サシスセソ,30000 というcsvファイルであれば、下記のスクリプトで open(IN1,"input.csv"); open(OUT1,">output.txt"); while ($line1 = <IN1>) { chomp($line1); my $tmp = $line1; @in1 = split(",",$line1); $out1 = join("\t",@in1); print OUT1 "$out1\n"; } close(IN1); close(OUT1); $in1[0]にABCやDEF、GHIが入り、$in1[1]にアイウエオ、カキクケコ、サシスセソなどが入ります。

kgyqk433
質問者

お礼

本当に素人で申し訳ございません、「全角ひらがな・漢字を使いたい」の間違いでした 何卒よろしくお願い致します。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

そもそも、そのCSVファイルの文字コードはなんですか? また、CSVは、アプリケーション依存のファイルで、excelから出力されたものと、perlなどから出力されたものは異なります。 ・CSVファイルの文字コード ・CSVのフォーマット  最低限この情報がないとなりません。なお、「半角ひらがな」は、どの文字コードにもありません。

kgyqk433
質問者

お礼

本当に素人で申し訳ございません、「全角ひらがな・漢字を使いたい」の間違いでした 何卒よろしくお願い致します。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

UTF-8に「半角ひらがな」は存在しないはずですが、半角ひらがながある文字コードって何ですか? それとも、半角カタカナの書き間違い?

kgyqk433
質問者

お礼

本当に素人で申し訳ございません、「全角ひらがな・漢字を使いたい」の間違いでした 何卒よろしくお願い致します。

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.1

半角ひらがなというのは一般に使用されている文字コードでは存在しませんが。 いわゆる半角カナの間違いでしょうか?

kgyqk433
質問者

お礼

本当に素人で申し訳ございません、「全角ひらがな・漢字を使いたい」の間違いでした 何卒よろしくお願い致します。

関連するQ&A

  • 文字列は大文字のまま、UTF-8エンコードの英字だけ小文字にしたい

    下記の方法でUTF-8エンコードをしたときに、 コードの英字が大文字になってしまい困っています。 use Encode; $str = "HOGEホゲ" $str =~ s/(\W)/'%' . unpack("H2", $1)/eg; print "$str"; 現状のエンコード後)HOGE%E3%83%9B%E3%82%B2 希望のエンコード後)HOGE%e3%83%9b%e3%82%b2 半角英数字(HOGE)は大文字のままで、 エンコードだけを小文字で書き出す簡単な方法はありますでしょうか。 (小文字でないと受け付けてくれないサイトに飛ばしたいため) 現状は正規表現でAからZまで26行繰り返しています。 $str =~s/\%([A-Z0-9]{1})?A/%$1a/g; ~ $str =~s/\%([A-Z0-9]{1})?Z/%$1z/g; よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • フォーム入力のチェック

    フォームの入力をCGI(Perl)でチェックするとき、 全角の漢字、カタカナ、ひらがなでの入力以外は禁止にしたいです。 どなたかいい方法をご存知でしょうか? とりあえず、現在は、 jcode.plで全角英数字⇒半角英数字に変換 フォームに入力された文字列を一文字(半角2文字)ずつ抽出して、 $a=~ s/([^\w ])/'%' . unpack("H2", $1)/eg; でエンコードしたものが%を含んでいるかどうかで判別してます。 でもこれだと全角英数字と半角英数字しかシャットアウトできません。 記号文字なども入力出来ないようにしたいです。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • utf8 の (1)(2)(3) を sjis で表示

    MYSQLに格納したデータに”(1)(2)(3)”という文字があります。 これを、PHPより $output1 = mb_convert_encoding( $out_contents, "SJIS", "utf-8"); エンコードしてCSV出力しているのですが、 excelで開いたとき?と”(1)(2)(3)”の部分だけ文字化けしてしまします。 どなたか対処方法ご存じでしょうか?

  • 正確に日本語にマッチさせるには??

    aからzまでの半角小文字と、あ~ん までの平仮名のいずれか一文字にマッチさせたいのですが、うまくいきません。 /[a-zあ]/ とすると、なぜか「い」や「わ」などの、他の平仮名にもマッチしてしまいます。 どのように書けば正確にマッチさせることが出来るでしょうか??分かる方いらっしゃったらよろしくお願いします。

    • ベストアンサー
    • Perl
  • shift-jisをUTF-8に読み込ませるには?

    shift-jisにてcsv形式で保存しているテキストファイルの配列(カンマ区切りの3番目)から取り出したものをUTF-8にエンコードする方法をご教示賜りたくご質問させて頂きました。 $Pscrtfl = "./datas/pdtscrt.txt"; open (DT,"<$Pscrtfl"); @Pscrt = <DT>; close (DT); foreach $i (@Pscrt){ @iW = split(/\,/,$i); $Pscrtfl = "./datas/pdtscrt.txt のtxtに入ってる3番目のデータを取り出して、それをUTF-8文字コードに 変換して出力させたいと思っております。 現在のところ私のやってみたこと foreach(@Pscrt){ use Encode; Encode::from_to( $_, 'utf8', 'shiftjis' ); $Pscrtfl .= $_; } とエンコードかけてみるんですが。。。。やはりcsvファイルの文字がUTF-8に変更していないのか、 <!doctype html> <html><head><meta charset="UTF-8">でprintしようとすると、やはり文字化けしてしまいます。 これを文字化けしない方法がお分かりの方おられましたら、ぜひご教示下さいませ。

    • ベストアンサー
    • Perl
  • 文字コードの変換(Shift-JISからUTF8)

    文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを 確認するとShift-JISのままです。 どなたか教えていただけないでしょうか? ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。 #!/usr/bin/perl use strict; use warnings; use utf8; use Encode; my $input_file="input.csv"; my $output_file="output.txt"; open (IN, $input_file) or die "$!"; open (OUT, ">$output_file") or die "$!"; while (<IN>){ chomp ($_); my @data=split(/,/,$_); for(my $i=0;$i<@data;$i++){ $data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換 $data[$i]=~s/\s+//g; print OUT $_; } print OUT "\n"; } close (IN); close (OUT);

    • ベストアンサー
    • Perl
  • メールの文字化け?

    マイクロソフトOEで、受け取った文書の一部(ひらがなの一文字)が英数字となる(半角英数字の二文字となる。)のは、なぜか。こちらの文書は送信済みでは英数字がないのに、返信された文書には英数字がある。また、今回送られてきた相手方の文書にもあった。 何が悪いのでしょうか。

  • ひらがな、カタカナの入力ができなくなりました。

    WindowsXPのノートパソコンをつかっています。 タスクバーにある文字の切り替えで、『あ』という表示のひらがなの設定にしてあるのに打った文字は英数字になってしまいます。 また、カタカナ全角、カタカナ半角の設定にしていても英数字になってしまいます。 全角英数字や半角英数字はそれぞれの大きさで英数字で正しく表示されます。 どうすれば、ひらがなやそれを変換して漢字が入力できるようになるでしょうか? 困っています。この質問は別のパソコンで書いています。 文字のプロパティでの設定は、かな入力にしてあります。念のためローマ字入力にして試しましたが、これにしてもやはり英数字が表示されてしまいます。 キー設定や色設定はATOK 、IME97などを試しましたが、どれでも上手くいきません。 再起動したりしても、よくなりません。 よろしくお願いします。  

  • かな入力でひらがなから英数字の切り替え

    かな入力に設定していて、ひらがなを打つ時と英数字の切り替えはキーボードの左上(Escの下)の半角/全角ボタンで 切り替えています。 それで英数字は(半角英数はabc)と(ABC)の使い分けは abcの時はシフト押さないでABCの時はシフト押しながらにしています。 そこで質問なのですが、複数の人が別の掲示板で >シフトキーを押しながら半角英数文字を打った後(決定前の下線がある状態)F9を押すと全角になる という書き込みをみたのですが、私のPCではなりません 1.どのように設定すればそうなるのですか? 2.かな入力の場合は一般的にはひらがなと英数字の切り替えはどのようにしていますか? 3.abcは半角英数字ですよね? ABCは全角英数字ですよね?  ABCは、どういうのですか? 半角大文字とでも  いうのですか? すみません、笑わずに教えて下さい。

  • 半角から全角の切り替え

    文字入力、キーを使って半角/全角の切り替えをしていますが、半角英数字から全角ひらがな入力に、なかなか切り替わりません(20分位すると切り替わるのですが)不自由しています。どなたか 教えて下さい。ビスタを使っています

専門家に質問してみよう