Jcode.plを使いShiftJISで出力しているcgiファイルを、
Jcode.pmを使ってUTF8で出力できるように修正していた所、
Internal Server Errorが発生。
Perl文法チェッカーを使い、エラー内容を調べてみると
Unrecognized character \xC2 at test.cgi line 168, line 846.
cgiファイル168行には↓
&Jcode::convert(\$val, 'utf8');
ここまで↑
Jcode.pmの846行目には↓
sjis SHIFT_JIS
ここまで↑
と表記されています。
cgiファイルの168行が間違っているのはわかるのですが、
「\xC2」が何を指しているのかさっぱりわかりません。
$valの中にあるテキストをutf8に変換したい場合は
本来どう書くものなのでしょうか?
No.3ベストアンサー
- 回答日時:
今、「Perl」でググると、1位がWikipediaで、2位がkent-web.comのPerl基礎入門といったように、旧来からのコンテンツが上位にあって、初心者がモダンなPerlの書き方を探すのが少しめんどくさい状況にあります。
(2008/06/16)http://www.itmedia.co.jp/enterprise/articles/080 …
世間に溢れている掲示板のCGIではJcode等を利用して文字コードの変換を行うのが常識とされており,実際に私もjcode.plやJcode.pmを利用してきた。しかし,Jcodeモジュールはutf8フラグまで考慮されておらず,Perl5.8においては,文字コード変換はEncodeモジュールに任せるのが一貫性が取れている。(2005/06/01)
http://blogs.dion.ne.jp/riji/archives/1203431.html
>utf8に変換したい場合は本来どう書くものなのでしょうか?
上記のとおり,Perl 5.8をお使いなら,標準モジュールのEncodeを用いるのがあるべきコーディングスタイルだと思います。
http://okwave.jp/qa4413021.html の私の過去の回答 ANo.3
および,その回答からさらにリンクでたどることができる私の過去の回答を参照。
もっと詳しい解説がお望みならこちらを。
http://www.rwds.net/kuroita/program/Perl_unicode …
http://www.bugbearr.jp/?Perl%2FUnicode
No.2
- 回答日時:
#1です。
自分の環境でも再現させてみたいので、
追加で質問なのですが、
以下で合っていますでしょうか。
修正前:
cgi ファイルの文字コード = UTF-8
入力される文字列 = SJIS
出力する文字列 = SJIS
Jcode.pl を使用
修正後:
cgi ファイルの文字コード = UTF-8
入力される文字列 = SJIS
出力する文字列 = UTF-8
Jcode.pm を使用
ロケールやuse utf-8プラグマについては、
原因でない可能性もあるので、
とりあえずおいておいてください。
この回答への補足
回答ありがとうございます。
HTMLのFORMで入力したものをcgiファイルで受け取り、
結果表示ページをcgiで表示したいと考えております。
文字コードに関しては
修正前は全てSJISだったものを、
修正後は全てUTF-8に変えたいと思っています。
Jcodeについてはその通りです。
今更で申し訳ないのですが、参考にしているのは
「KENT WEB」の「Topics Board」という掲示板です。
↑これを全部UTF8表示にカスタマイズしたい感じです。
No.1
- 回答日時:
cgi の文字コードや、
ロケールなどがわからないので、
方向違いでしたら済みません。
\xC2 関連のエラーは、検索するとたくさん出てきますね。
http://lists.debian.org/debian-devel/2005/02/msg …
こちらのページを読む限り、
use utf-8 プラグマを使えば良いのではないかと思ったのですが、
いかがでしょうか
この回答への補足
回答ありがとうございます。
>cgiの文字コード
cgiの文字コードですか?
ファイルの文字コードもUTF8、
書き出そうとしているHTMLもUTF8です。
>ロケール
ロケールというのは、何でしょうか?
何と何があるのかすら、わかりません。
>\xC2 関連のエラー
質問投稿前に検索はしてみましたが、
直面している問題の解決になるのか
判別がつかなかったため、投稿致しました。
>use utf-8 プラグマ
これはどうやって使うものでしょうか?
ファイル内のどこに書き込んだら良いのか、
記述の仕方や場所も教えていただけるとありがたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlをwindows環境でshift-jis...
-
[Perl]Shift-JISのXMLを解析する場
-
VBAでCSVファイルを途中行まで...
-
バッチファイルの作り方(CSV→...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
VBAコードを張り付け後のエクセ...
-
ListBoxのデータを高速でファイ...
-
JavaでCSVファイルを高速に読む...
-
至急お願いします。C言語で.img...
-
タブの色を変更する方法
-
vba dir の相対パス
-
while(<ハンドラ>) {} で行数を...
-
RSS自動生成で文字化け
-
awkスクリプトでダブルクォーテ...
-
unixでのファイルロックの方法...
-
Perlで空白行を削除
-
教えて!perlから.exeファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
HTTP::Request::Common qw(POST...
-
utf-8のCSVをshift_jisに変換し...
-
ファイル出力をUTF8Nではなくて...
-
[Perl]Shift-JISのXMLを解析する場
-
perlのmysqlで文字化けをする、...
-
文字を一文字ずつ区切りたい
-
perlでuse utf8でsjisのファイ...
-
Perl utf8上でshiftjisをデコード
-
does not map to shiftjis は解...
-
DBIモジュールと Perl5.8
-
消費税の計算で 税込価格から...
-
Data::Dumper;でダンプ後表示し...
-
Perl UTF8で出力
-
perlをwindows環境でshift-jis...
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
おすすめ情報