質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Q&A

解決済

1回答

1213閲覧

CGI(Perl)にて複数の文字コードのファイルを読み込んだ際(UTF-8、EUC)の文字化けについて

dev-beginner

総合スコア25

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

0グッド

0クリップ

投稿2022/04/15 05:39

編集2022/04/15 06:55

Perlにて質問があります。
Perl(EUC-JP)にてHTML::Templateを使用してWebページを作成しているのですが、出力した際に文字化けします。
ソースコードは以下の通りです。どなたかご教授お願い致します。

■Perl(EUC-JP)ソースコード

Perl

1#!/usr/bin/perl 2# 3 4### モジュール読み込み ----------------------- 5use lib qw(.); 6use strict; 7use CGI; 8use Jcode; 9use HTML::Template; 10use XML::TreePP; 11 12use Config::Tiny; 13 14 15 16### 初期設定 ------------------------------------- 17my $tmpl_html; 18# テンプレートをセット 19$tmpl_html = HTML::Template->new(filename => './test.html'); 20 21my $testxml = './test.xml'; 22 23my $tpp = XML::TreePP->new(); 24$tpp->set( force_array => [qw( REC )] ); 25#$tpp->set( utf8_flag => 1 ); 26$tpp->set( ignore_error => 1 ); 27my $myxml = $tpp->parsefile( "$testxml" ); 28 29 30my $test = $myxml->{DATA}->{TEST}; 31$tmpl_html->param('XML' => $test); 32 33 34my $config = Config::Tiny->read("./test.ini"); # settei.iniの読込 35my $ini = $config->{"test"}->{"test_ini"}; 36$tmpl_html->param('INI' => $ini); 37 38 39my $testtext = './test.txt'; 40open(TXT, "< $testtext") or die "Can't Open TXT file.\n"; 41my $testtext2 = <TXT>; 42close(TXT); 43$tmpl_html->param('TXT' => $testtext2); 44 45 46 47 48# HTML書き出し 49print "Content-type: text/html; charset=EUC-JP\n\n"; 50print Jcode->new($tmpl_html->output)->euc; 51 52#print "Content-type: text/html; charset=EUC-JP\n\n"; 53#print $tmpl_html->output; 54 55 56exit;

■HTML(UTF-8)ソースコード

HTML

1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html lang="ja"> 3<head> 4 5<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6<title>MEVIUS | 管理者メニュー</title> 7<meta http-equiv="Content-Language" content="ja"> 8<meta http-equiv="Content-Style-Type" content="text/css"> 9<meta http-equiv="Content-Script-Type" content="text/javascript"> 10<meta name="Copyright" content="株式会社アイシン"> 11</head> 12 13<body> 14 15あいうえお 16<br> 17<tmpl_var name="XML"> 18<br> 19<tmpl_var name="INI"> 20<br> 21<tmpl_var name="TXT"> 22 23 24</body> 25</html> 26

■XML(UTF-8)ソースコード

XML

1<?xml version="1.0" encoding="UTF-8" standalone="no"?> 2<DATA> 3 <TEST>XMLファイル</TEST> 4</DATA>

■iniファイル(EUC-JP)ソースコード

XML

1[test] 2test_ini=イニファイル

■txtファイル(EUC-JP)ソースコード

XML

1テキストファイル

■出力結果-------------------------------------
あいうえお
XMLファイル
??????????
?????????????

上記のような出力結果になり、EUC-JPのiniファイル、txtファイルの値が文字化けします。
どなたかご教授頂けると幸いです。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2022/04/15 08:03

perlとJcodeのバージョンはどれでしょうか。
dev-beginner

2022/04/15 09:08

KojiDoi様 お世話になります。以下、ご回答します。 Perl5.30、Jcodeのバージョンは分かりませんでした。 OSはUbuntu 20.0.4になります。
KojiDoi

2022/04/15 10:41

perl -MJcode -le 'print $Jcode::VERSION' これでバージョン番号が出力されるはず。
guest

回答1

0

ベストアンサー

eucコードのテキストを変換せずにutf-8の文字列にマージしようとしているので、結果が文字化けします。
こんな感じにすればいいはずです。

my $config = Config::Tiny->read("./test.ini"); # settei.iniの読込 my $ini = jcode($config->{"test"}->{"test_ini"})->utf8; $tmpl_html->param('INI' => $ini);

ただしJcode.pmのバージョンが古いとutf-8はうまく扱えないのではないか(ものがないので検証できませんが)と思います。
Jcodeは15年も前に役割を終えており、現代ではこのような処理にはEncodeモジュールを使うべきしょう。

投稿2022/04/15 11:03

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dev-beginner

2022/04/17 23:43

指定の通りするとうまくいきました。 Encodモジュールに関しても調べてみます。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問