Perlのcgi-lib.plでデコードされた文字をUTF-8にエンコードするにはどんなコードを書けば良いのでしょうか。
"あ"という文字をHTMLフォームから受取って%82%A0というS-JISのバイトコードに再エンコードするコードを質問したら
$a = "あ";
$a =~ s/([^a-zA-Z0-9*\-.@_])/sprintf("%%%02X", ord($1))/eg;
$a =~ s/%20/+/g;
print $a;
という答えを頂きました。コードの意味はよく判らなかったのですが、ちゃんと思惑通り$aは%82%A0になりますので長い間重宝にさせていただいています。
今度は$a="あ";の値をUTF-8の%E3%81%82にエンコードしたいのですが、どのように上記のコードを変更すればよいか教えてください。正規表現というのを使えば出来るのでしょうが、本で読んでもやっぱりわかりません。
No.2ベストアンサー
- 回答日時:
> データの送信元のHTMLがUTF-8ならば、一旦cgi-lib.plで
> デコードされた文字も私が使っているコードのままでUTF-8に
> 再エンコードされるということでしょうか?
そのとおりです。
ただ、例外としてformにaccept-charsetを指定するなど
送信する際の文字コードを別途指定した場合はそれに従います。
EncodeもCGIもこれまでのライブラリーと同じように使えるようにする書き方と
オブジェクト指向っぽくする書き方の両方ができるのでいろいろと試してみると
面白いと思います。検索するとドキュメントもかなり豊富ですよ。
No.1
- 回答日時:
"あ"がUTF-8でエンコードされていたら何も考えずに同じコードで
いけると思います。
つまり、ファイルをUTF-8で保存しておくとUTF-8が出力されます。
しかしながら、"あ"が何の文字コードで書かれていたとしてもUTF-8に
変換した上でURLエンコードする方法を教えた方がよいと思うので、
そのコード例を書いてみます。
以下、Perl 5.8以降でしか動作しませんが、5.8以降では標準となる
書き方だと思います。
use CGI;
use Encode qw(from_to);
use Encode::Guess qw/euc-jp shift-jis/;
my $a = "あ";
from_to($a, 'shift-jis', 'utf-8'); # Shift-jisで書かれた"あ"をutf-8に変換
$a = CGI::escape($a); # $aをURLエンコードして$aに代入
print $a;
from_toのところは文字列が不明で推測したいときは'shift-jis'の代わりに
'Guess'を使います。ただ、今回の'あ'のように文字列が短く、
判断が難しい場合は推測に失敗します。
...昔ながらのPerlプログラマーはあまりライブラリを使いたがら
なかったりしますが、ライブラリを使えるところはライブラリを
使った方が楽ですよ。
まずはご回答ありがとうございます。
> "あ"がUTF-8でエンコードされていたら何も考えずに同じコードでいけると思います。
データの送信元のHTMLがUTF-8ならば、一旦cgi-lib.plでデコードされた文字も私が使っているコードのままでUTF-8に再エンコードされるということでしょうか?
> しかしながら、"あ"が何の文字コードで書かれていたとしてもUTF-8に変換した上でURLエンコードする方法を教えた方がよいと思うので・・・
教えていただいたコードを試してみたいと思います。もっとも私のパソコンの環境が古いのでセットアップしなおしからですが、いい機会です。重ねてお礼申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PerlのCGIで全角スペースを入れて
-
フォームメールを受信すると文...
-
10Mバイトて文字数に すると何...
-
stable diffusionのエラー
-
タグの不等号処理
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
html→aspxへのタグ変換方法
-
この関数はどのプログラミング...
-
char str[256]の256の意味は?
-
エクセルVBA:日付データの変換...
-
Sys::Syslogモジュールを利用し...
-
[VBScript][wsh]byte単位でのデ...
-
VBAでShift-JISのURLエンコード
-
バイト列とバイナリ列の違いが...
-
ピクセル,dpiから容量(バイト...
-
.netで、ibm漢字で書かれたテキ...
-
CGIを勉強しています。¥n(改...
-
UTF-8で5~6バイトになる文字コ...
-
コレって何が表示されたんですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
&jcode'convert(しても文字化け...
-
フォームメールを受信すると文...
-
utf-8でメールを送信すると件名...
-
ESC/Pのテキスト印字の制...
-
応募フォームなどの住所欄で最...
-
Perl でメール送信プログラム。
-
Perlのcgiを中国語で表示可能に...
-
CGIメールフォームのメールが文...
-
HttpURLConnection転送で漢字表示
-
アクセスログから検索キーワー...
-
文字コードsjisをUTF8に書き換...
-
秀丸でCGIを開いたら文字化...
-
文字化け
-
文章の編集の自動化
-
JavaScriptからCGI
-
文字化け
-
SQLServerへの出し入れで文字化け
-
ソ噂浬欺圭構蚕十申曾箪貼能表...
-
フォームメールで名前を全角の...
-
perl cgi のエンコード SHIFT...
おすすめ情報