No.3ベストアンサー
- 回答日時:
IEなどのJavaScriptで escape を使うと、日本語などは UTF-16(Big Endian)にエンコードされ、%uHHHH 形式にエスケープされます。
また US-ASCII の場合、A-Z a-z 0-9 _ @ . * / + - はエスケープされず、それ以外は %HH 形式にエスケープされます。
UTF-16 への変換は jcode.pl ではできないので、何かしらのモジュールが必要です。
Perl 5.8 以上ならば Encode.pm が標準で使えますが、そうでない場合は Jcode.pm をインストールして使うとよいでしょう。
※ただし、Jcode.pm には utf16 関数がないので、ほぼ同等の ucs2 関数を使います。
以下、サンプルです。
# Encode ver.
sub js_escape {
use Encode;
my $str = join "", map sprintf("%%u%04X", $_), unpack "n*", encode("utf16be", decode($_[1], $_[0]));
my ($ch, $hex);
$str =~ s<%u00(..)>{ ($ch = pack("H2", $hex = $1)) =~ m<[^\w\@.*/+-]> ? "%$hex" : $ch }eg;
$str;
}
# Jcode ver.
sub js_escape {
use Jcode;
my $str = join "", map sprintf("%%u%04X", $_), unpack "n*", Jcode->new(@_)->ucs2;
my ($ch, $hex);
$str =~ s<%u00(..)>{ ($ch = pack("H2", $hex = $1)) =~ m<[^\w\@.*/+-]> ? "%$hex" : $ch }eg;
$str;
}
どちらも使い方は同じで、
$escaped_str = js_escape($str, $icode);
となります。
$icode には $str のエンコーディング("sjis" や "euc-jp" など)を指定して下さい。
# print js_escape("おはよう", "sjis"); など
No.2
- 回答日時:
Perl 5.8.4を使ったサンプル
#javascript互換escape
use Encode qw(from_to);
$test="おはよう";
$len=from_to($test,'SHIFTJIS','UTF16BE');
#$len=length($test);
for($i=0;$i<$len/2;$i++){
$code=vec($test,$i,16);
printf "%%u%04X",$code;
}
解説:
要は質問文のコードは、ユニコードに%uを付けたものだってことです。
そこで、現在の文字コードのシフトJISからユニコードに変換して、vecで16ビットずつ取り出しています。
No.1
- 回答日時:
この回答への補足
ありがとうございます!
早速試してみたのですが、
文字コードを
sjisにした場合は ⇒ %82%a8%82%cd%82%e6%82%a4
eucにした場合は ⇒ %a4%aa%a4%cf%a4%e8%a4%a6
となるようなのですがescapeの場合と全く同じに
するには文字コードは何にすればよいのでしょうか?
また、その場合jcode.plとかでコンバートできますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) エクセル 表の移動 2 2023/04/05 20:29
- 数学 (4)のim(T)をu1,u2,u3の線型結合で表せ、という問題がわからないです。回答を見ると私の解 2 2023/05/31 22:14
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Android(アンドロイド) 128GB LAZOS マイクロSDカード 1280円 もっと良い商品ある? 4 2023/02/07 19:42
- ルーター・ネットワーク機器 BuffaloのWI-FI6対応の無線LAN子機 これからもっと性能の高い製品が発売される可能性 2 2023/08/27 22:55
- その他(Microsoft Office) COUNTIF関数の合計不一致について 1 2023/01/19 16:37
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- USBメモリー・SDカード・フラッシュメモリー 「microSDXC」単独使用とフルサイズアダプター使用の違い。速度や耐久性に違いはありますか? 5 2022/04/29 04:38
- 数学 線形代数の正規直行系についての問題がわからないです。 1 2022/07/16 11:20
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
テキストファイルで提出とは?
-
perlのflock関数でロックをかけ...
-
Perlで特定文字列から特定文字...
-
bashスクリプト
-
perlをバージョンアップしたら...
-
TeraPadエディターの操作方法に...
-
perlで自動ログインをしたいが...
-
perlの構文でカンマの意味が分...
-
Perl の外部モジュールの利用方法
-
Strawberry Perl for Windows ...
-
perl LWPでURLにアクセスした時...
-
Perlで、「が」を、「...
-
Perlで時間の計算
-
perlのプログラミング 部分入れ...
-
英数文字列のうちの数値を4桁に...
-
Perlの例文でif($a==1&&$b==5&&...
-
Wallpaper Engineでおすすめの...
-
openした後、closeしないでプロ...
-
perlで複数のファイルの処理に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INDIRECT 横に再度抽出したい
-
openした後、closeしないでプロ...
-
perlをバージョンアップしたら...
-
Perl の外部モジュールの利用方法
-
Perlのエラーについてご教授く...
-
テキストファイルで提出とは?
-
bashスクリプト
-
Windows10においての『Perl』の...
-
perlのflock関数でロックをかけ...
-
Perlで特定文字列から特定文字...
-
perlプログラミング 空白行削除
-
画像が表示でnull; this.src
-
ターミナルで特定の文字と文字...
-
Wallpaper Engineでおすすめの...
-
perl 正規表現でエラー
-
perlで複数のファイルの処理に...
-
perlでリテラル値はメモリにど...
-
このファイルを開く方法で困っ...
-
LinuxにおいてのPerlのプログラ...
-
PerlでUTF-8のファイルの文字列...
おすすめ情報