No.4ベストアンサー
- 回答日時:
No.3です。
なんかいろいろ間違えてますね。(EncodeモジュールでShift_JISに変換しています)
これは間違いです。消し忘れました…orz
$str =~ Encode::from_to($str, 'Guess', 'euc-jp');
らへんの
$str =~
って部分、無くても動きます。
というか、無いほうが普通かな…OTZ
ついでに、もしかしたら逆に、エスケープする方法
(日本語文字→%93%FA%96%7B%8C%EA%95%B6%8E%9A見たいな変換)
を訊いていたのかもしれない(見当違いな回答をしていたかもしれない)ので、そっちも答えておきます。
No.2さんのURI::Escapeでやる方法が簡単でいいと思いますが、正規表現で変換すると、
$str =~ s/(\W)/'%' . unpack('H2', $1)/eg;
となります。これがもっとも実行速度が速い方法らしいです。実際見てみても、URI::Escapeのものよりも、1.5倍から2倍くらい速いみたいです。
ちなみに、アンエスケープする方法で、URI::Escapeを使った場合、
use URI::Escape;
$safe = uri_unescape("%E6%A4%9C%E7%B4%A2%E6%96%87%E5%AD%97%E5%88%97");
とすればアンエスケープしてくれますが、UCS2(UTF-16、最近のIEのJavascriptではこうやって変換してくることも。)はアンエスケープしてくれないかもしれません。
No.3
- 回答日時:
URIエスケープ(URLエンコードともいう)というやつですね。
文字コードによってアンエスケープ方法が違います。
Perlの例で説明すると、
Shift-JISやEUC-JPならば、
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
で、いけます。JcodeやEncodeのあいまい変換を使って文字コードを直すといいと思います。
Unicodeの場合は、
$str =~ s/%u([0-9a-fA-F]{4})/pack('H4', $1)/eg;
と
$str =~ s/%([eE][0-9a-fA-F]{1})%([0-9a-fA-F]{2})%([0-9a-fA-F]{2})/pack('H2', $1) . pack('H2', $2) . pack('H2', $3)/eg;
の二通りあって、上がUTF-16、下がUTF-8(EncodeモジュールでShift_JISに変換しています)となります。
ちなみに、だいたいのものを変換したければ、
use Encode qw(from_to);
use Encode::Guess qw(euc-jp shiftjis);
if($str =~ /%u[0-9a-fA-F]{4}/){
# UCS2(UTF-16)の場合は
$str =~ s/%u([0-9a-fA-F]{4})/pack('H4', $1)/eg;
$str =~ Encode::from_to($str, 'ucs2', 'euc-jp');
}elsif($str =~ /(?:%[eE][0-9a-fA-F]{1}(?:%[0-9a-fA-F]{2}){2}){2,}/){
$str =~ s/%([eE][0-9a-fA-F]{1})%([0-9a-fA-F]{2})%([0-9a-fA-F]{2})/pack('H2', $1) . pack('H2', $2) . pack('H2', $3)/eg;
$str =~ Encode::from_to($str, 'utf8', 'euc-jp');
}else{
$str =~ s/%([0-9a-fA-F]{2})/pack('H2', $1)/eg;
$str =~ Encode::from_to($str, 'Guess', 'euc-jp');
}
これで大体いけると思います。(euc-jpとShift_JISの判別方法がわからないので、あいまい変換。)
以下は参考です。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Escape
http://www2.famille.ne.jp/~akio1998/simaguni.html
No.2
- 回答日時:
こんなのをご所望なのかどうかはわかりませんが
use URI::Escape;
$safe = uri_escape(検索文字列);
で$safeにはURIエスケープされた文字列が入ります。
例えばSJISの「検索文字列」を与えれば「%8C%9F%8D%F5%95%B6%8E%9A%97%F1」になります。
EUCの「検索文字列」を与えれば「%B8%A1%BA%F7%CA%B8%BB%FA%CE%F3」になります。
見当違いだったら申し訳ないです。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Google+ とっても古いスマホですが、お聞きしたいです。 iPhone8プラスですが、Googleの検索文字を入 3 2023/08/06 08:59
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) Excelヘルプの原文を表示する最速の方法(手順)には? 1 2023/08/11 11:30
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(IT・Webサービス) Google日本語入力の操作方法 一度確定した後の訂正方法 1 2023/06/17 16:03
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- ライフスタイル・ヘルスケア URLを開くアプリが見つかりません 2 2022/09/16 12:09
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl の外部モジュールの利用方法
-
ファイルアイコンの左下に緑の□...
-
perlのプログラミング 部分入れ...
-
ペプシコーラとコカ・コーラとD...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
Blenderについて
-
perl このテキストファイルを簡...
-
Perlでファイルの末尾から指定...
-
秀丸での一括変換について
-
英数文字列のうちの数値を4桁に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイルで提出とは?
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
INDIRECT 横に再度抽出したい
-
Perl の外部モジュールの利用方法
-
Perlで特定文字列から特定文字...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
TeraPadエディターの操作方法に...
-
アルファベットに付いて質問し...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
Wallpaper Engineでおすすめの...
-
Perlで時間の計算
-
perlのrequireの動き方について...
-
perlでリテラル値はメモリにど...
-
画像が表示でnull; this.src
おすすめ情報