• 締切済み

Perl初心者です。文字化けについて

プログラムの知識がほとんどないので、質問に足りないところがありましたら申し訳ありません。 Perlで書かれた、XMLを読み込むツールがあります。 XML上では文字化けしていないのに、ツールで読み込むと文字化けしてエラーになってしまいます。 Inputファイル(XML)とOutputファイル(エラーログ)の文字データを比較すると、文字化けしている文字の1バイト目がなくなっていることがわかります。 このような場合の対処方法がありましたら、教えてください。 私がツールの中身を理解できておらず、何か必要な情報などがありましたら、ご指摘ください。 宜しくお願いします。

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

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>XMLの中に「問処」という言葉がいくつか出てくるのですが、文字化けになる場合とならない場合があります。 ということであれば、「問処」が原因で無いかもしれませんね。 発生する場合のその前に連なる文字を書いてみてください。 そのプログラムが「Shift_JISに対応している」というのが怪しいです。

sugaroreggplant
質問者

お礼

お礼が遅くなり申し訳ありません。 現在データとして他にエラーが発生するXMLが残っていないので、またエラーが発生した時に他のパターンも調べてみたいと思います。 ありがとうございました。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

誰かの作ったプログラムを利用しているだけということですよね? 発生している文字化けとは日本語の部分が化けていると言うことで良いですか?1バイト文字しか無いのに違う文字に変わってしまうということなら、プログラムのバグもしくは利用方法の誤りでしょう。 まず最初の確認としては、XMLファイルの文字コードは普通はUTF-8でそうで無い場合宣言が必要ですが、そのあたりは大丈夫でしょうか? あと、そのPerlプログラムは日本語など多バイト文字に対応しているのでしょうか?対応していると書かれている場合、UTF-8以外にも対応してそうかどうか(UTF-8以外の文字コードを使っている場合)。

sugaroreggplant
質問者

補足

ありがとうございます。 説明が不足していて申し訳ありません。 発生している文字化けは日本語で合っています。 具体的な例は「処」という文字です。 プログラムはShift-JISに対応していて、XMLもShift-JISで書かれています。 XMLの中に「問処」という言葉がいくつか出てくるのですが、文字化けになる場合とならない場合があります。 文字化けになった部分のInputとOutputをShift-JISで比較すると、"96 e2 8f 88"と"96 e2 88"となっていて、Outputの「処」の"8f"がなくなっています。 現在の対応としては、XML上で文字化けする文字の前に半角スペースを入れると(「問 処」とする)文字化けが発生しなくなるので、今はそのように対応しています。 何かエラーが発生しなくなる方法がわかりますでしょうか?

関連するQ&A

  • perlのcgiが文字化けします。

    perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

  • 一部の文字のみ文字化けします

    phpでXMLを生成しています。 XMLをエディターで見るとほとんどの文字は正常に表示されているのですが、一部の文字だけが文字化けしています。 具体的には 究、岩、ど の三つの文字だけです。 その三つの文字はいずれも同じ文字に文字化けしています。 cを丸で囲ったコピーライトの表記に使われる文字に似ています。 上記の文字のみなにかコピーライトに引っかかっているのでしょうか。 googleで色々と調べてみましたが、他の文字での文字化けの事例はあるのですが、上記の文字での事例は見つかりませんでした。 どなたかご教示願えませんでしょうか。 phpのバージョンはPHP Version 5.3.3です。 phpのあるディレクトリと同じディレクトリにhtaccessで以下の記述を入れています。 php_value mbstring.internal_encoding UTF-8 php_value default_charset UTF-8 php_value mbstring.http_output UTF-8 php_value mbstring.language UTF-8 php_value mbstring.http_input auto php_flag mbstring.encoding_translation On php_value output_handler mb_output_handler

    • ベストアンサー
    • PHP
  • ファイル出力時、ファイル名が文字化けする

    Windows上から持ってきたファイルのファイル名ををLinux上のperlプログラムでdecode(perlの内部用文字に変換)してから最終的にutf8に変換してファイル出力を行う下記プログラムがあります 下記コードの①のケースで出力したファイルの中身は文字化けしていないです。ところが②のケースで出力した場合、ファイルの中身は文字化けしていないのですがファイル名が文字化けします。 何か良い対策方法ありますでしょうか。 ------------------------------------------------------------- use utf8; use Encode qw(decode encode); $name = decode('cp932', $name); ←$nameはファイル名 $name = encode('utf8', $name); my $outpath = '/sample/test'; ← ①ファイルの中身は文字化けしていない。 my $outpath = '/sample/' . $name; ← ②ファイルの中身は文字化けしていない。ファイル名が文字化け。 opne my $fh '>', $outpath; print $fh $name; close($fh);

    • ベストアンサー
    • Perl
  • [perl5.8] utf8で文字出力すると文字化けする

    perl5.8で、テキストをunicode(utf8)で出力したのですが、文字化けします。 ソースは以下のとおりです。 -----ソース----- use open OUT => ":encoding(utf8)"; open(OUT, ">utf8.txt"); print OUT "utf8だよ\n"; close(OUT); ----------------- できたファイルはutf8エンコードなのですが、 エディタで見ると「だよ」が文字化けします。 ちなみにフリーソフトで、SJIS形式の「utf8だよ」が 書かれたファイルをutf8に変換すると、文字化けしません。 フリーソフトで生成したutf8ファイルと、 自作perlで生成したutf8ファイルとを バイナリエディタで読込み比較すると 75746638E381A0E382880D0A (フリーソフト) 75746638C282C2BEC282C3A60D0A (自作perl) という差が出ています。 原因がお分かりになる方、知恵をお貸し願えますか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • perl初心者です。

    すみません、xmlファイルからCSVファイルに変換するプログラムを作成しなくてはいけないのですが、 perlを1からあまり書いた事がないので イメージがわきません。 何か参考になるページをネットで探してるのですが、 どなたか参考になりそうなHPをご存じでしたら URLを教えていただけると助かります。

    • ベストアンサー
    • Perl
  • Perl:ファイル名だけ文字化けする

    Perlをいじって2日の者です。 WindowsVistaを使っております。 現在renameを使ってファイル名を変更しようとしています。 現在のファイル名がIDだけで、 Web上にあるそのIDに対応する情報をファイル名に追加しようとしています。 Web上の情報を取得するまではできたのですが、 変数に入れたその情報を、ファイル名に入れようとすると文字化けします。 ただ、その情報をコマンドプロントで扱う時も、テキストへ出力してみても文字化けしません。 文字化けは、文字コードなるものが原因らしいということで、 とりあえずよく見かける「UTF-8」というものにエンコードしてみたところ、 テキストへの出力が、ファイル名へのそれと同様に文字化けしました。 エンコードした上でファイル名に入れようとすると 情報のそのものがないものとして扱われるようになりました。 これはどう解釈すればいいのでしょうか? どうすれば文字化けを解決できるでしょうか?

    • ベストアンサー
    • Perl
  • 文字化けが起こります

    皆さんこんばんは。 8月にXMLについて勉強をし始めた者です。 XMLに関しては横浜ベイキットのXiを使うと良い、 と勧められてXiを勉強し、当初の予定だった検索エンジンは出来る事が出来ました。 今回は、xml文書の要素に、フォームから入力された文字列を、新たに追加するような機能を追加したい考えています。 そこで、あるXML構造の階層が書かれているテキストファイルを読み込み、それを文字列としてwordという変数に代入します。 そしてその文字列と、入力された文字列とを組み合わせて、Xi上でXML文書の形で、saveXmlで保存します。 しかし、保存し作成したファイルをみてみると、 読み込んだテキストファイルの部分の日本語が文字化けしてしまい、ファイルとして使用できなくなってしまいます。 この文字化けの原因が分かる方いましたら、 ぜひご教授のほどよろしくお願いします。

    • ベストアンサー
    • XML
  • Winのxmllintで文字化けを解消するには?

    お世話になります。 Windows7 Pro 32bit SP1上の、 DOSコマンドプロンプト上で、 xmllint -noout -valid test.xml を実行した際、 test.xml内で外部DTDファイルを指定しているところで エラーが発生していましたが、 その際のエラー表示が、 validity error: Content model of xx~(文字化け)~xx is not determinist: xx~(文字化け)~xx になっています。 外部DTDファイル、XMLファイルとも、 文字エンコードは、 UTF-8 です。 どうすれば、 「xx~(文字化け)~xx 」 部分を、正常な文字列として表示させることが 出来るでしょうか? なお、もしDOSプロンプト上から無理でしたら、 何かxmllint以外のツール等で、 外部DTDファイルとXMLファイルにおける Valid XML(妥当なXML)のチェックが 出来て、エラー行や内容などを、 正常な文字列として表示出来るツール等がございましたら、 教えてください。 以上になります。 よろしくお願いします。

    • ベストアンサー
    • XML
  • 文字化けについて

    現在PHPでの開発をおこなっています。 環境はWindows2000、Webサーバー『APACHE』、PHP『php-4.2.0-Win32』を使用しております。 Mysqlも接続でき、Web上でも表示ができるようになったのですが、文字化けを起こしてしまいます。以前カタカナの『ソ』が文字化けを起してしまったので、その時は『php.ini』ファイルの ・output_bufferring = Off ・default_charset = EUC-JP ・mbstring.http_input = auto ・mbstring.http_output = EUC_JP ・mbstring.internal_encoding = EUC_JP ・mbstring.substitute_character = none ・register_globals = On と7箇所設定を変えました。自分で作成したソースもEUCで保存してるんですけど、 文字化けが起こってしまいます。 どうしたらよろしいでしょうか? お分かりになる方がおられましたらよろしくお願い致します。

    • 締切済み
    • PHP
  • 本を探しています(XMLをPerlで文字取得編集)

    お世話になります。 XMLファイル(DTDファイルも別途有ります)を、 出来ればPerlで、 XSLT(XSLの変換機能)等を利用して、 文字取得・編集したいです。 (XMLから文字を取得して、Perl等で文字編集後、  別のテキストファイルとして出力したいです) そのような内容が掲載されている本を Amazonのレビュー等を参考にしながら探しているのですが、 なかなか見つけることが出来ません。 できればPerlがよいのですが、なければ、 Perl以外の別のプログラム言語でも構いませんので、 お勧めの本(もしくはWebサイト等)などございましたら、 ぜひ紹介してください。 よろしくお願いいたします。

    • ベストアンサー
    • XML

専門家に質問してみよう