javascript 的 escape 编码用perl怎么实现?

javascript 的 escape 编码用perl怎么实现?

javascript 的 escape 编码用perl怎么实现?
最好是不用模块的,或者怎么从模块中提取出有用的部分代码?因为做这样的单一功能,用模块太浪费了。

例如 '我' 的hex码是 CED2,escape码是 %u6211,这是怎么得来的呢?
楼主误会了……那个不是什么escape编码,只是普通的unicode编码而已。
javascript的escape函数就是取得字符的编码(注意这里说的是“字符”而不是“字节”)。

我  使用 GB2312 编码表示时,为两个字节,0xCE 0xD2,就是楼主所说的hex码CED2;
在Unicode中,“我”的编码是U+6211,这个数字称为“代码点”。
注意在这里,代码点是一个数字——U+6211(就是十六进制的0x6211),
而不再是像GB2312那样表示为多个字节。
javascript中(也许)就表示为 %u6211。
所以代码不同,仅仅是所处的编码环境不同而已(一个是GB2312一个是Unicode)。

一点题外话,Unicode的一种最常见的表现方式就是UTF-8,perl也内建了对UTF-8的支持。

现在回到楼主的问题。提问方法可以改成“如何用Perl得到某个文字的Unicode值?”

先说答案。如果楼主不想用任何模块,则必须给perl输入UTF-8的内容才行。
这样用下面的代码片段即可。

#!/usr/bin/perl


$str = <>;
chomp $str;

utf8::decode($str);
@chars = split //, $str;
foreach (@chars) {
    printf "%x ",  ord($_);
}
print "\n";


运行结果;

test.pl < test.txt
6211 4eec 4e00 8d77 5b66 50 65 72 6c

test.txt的内容为“我们一起学Perl”,用记事本编辑后保存成UTF-8格式。


如果楼主的输入内容不能保证是UTF-8,那就必须要借助Encode模块才行。
将上面的utf8::decode变成:

Encode::decode("gb2312", $str);     #  适用于gb2312编码,windows下一般用这个即可
输入的内容是GBK的'我',用上面的代码得到是还是 CE D2
改成 Encode::decode("gb2312", $str); 后有错误提示
Undefined subroutine &Encode::decode called at....
貌似没有模块支持就不行?
如果能知道 怎么从 CED2 变成 6211 的算法就好了

我看到一个 CP936.TXT 是 gbk跟unicode 的对应关系。
但我想,它们不会是某个组织、团体人为规定的强行映射吧,总应该有个什么转换算法来对应吧? 否则不得查表才能得到结果?那些转换模块是怎么做的呢?算法如何呢?
cp936.txt是windows上用的转换表,用它实现算法的话,你将可以得到与windows相同的功能。相当可信。

多说一句,gbk和unicode之间没有转换算法,只有转换表。
Undefined subroutine &Encode::decode called at....
你應該要先用
use Encode;
Encode在perl 5.8.0以後內建在perl中
不需要另外安裝...
用decode("gb2312", "我");
之後就可以轉成unicode編碼..
在套用上面的程序應該就可以work...

use Encode;

$str=decode("gb2312","我";
@chars = split //, $str;
foreach (@chars) {
    printf "%x ",  ord($_);
}

得到6211
成功了!谢谢两位!