unescape编码错误

javascript 的 escape 中文 编码成 utf-8格式的

ruby 的 unescape 中文 解析为 gbk编码的,所以ruby无法解析javascript的escape

什么情况下ruby可以解析:

还是中文的问题,在?传递中文参数时请使用encodeURIComponent.

document.write(encodeURIComponent(”中文”)); => %E4%B8%AD%E6%96%87
document.write(escape(”中文”)); => %u4E2D%u6587

Rails 能自动 decode 使用encodeURIComponent的编码,但不能对javascript escape的中文进行unescape.CGI.escape和CGI.unescape方法编码是以GBK方式编码中文的,而javascript的 escape和unescape是utf-8方式。

那如何让ruby解析javascript的 escape呢?

code_str.encode!('utf-8', 'gbk', :invalid => :replace) #忽略无法识别的字符

r3 = code_str.gsub(/\%u([\da-fA-F]{4})/) {|m| [$1].pack("H*").unpack("n*").pack("U*")}

# ruby对某些符号的编码问题 需要另外单独处理,如:

# %d => *

# %20 => +

#

result = CGI::unescape(r3)​

US-ASCII 和 UTF-8
UTF-8 包括 US-ASCII 和多字节编码。与普通的多字节编码不同,[b]UTF-8的字节长度不固定[/b],对于ASCII, 字节长度为1, 对于中文,阿拉伯文等,可以是2,3或更多字节,这样能有效节省存储空间. 它还与很多传统编码标准兼容,所以很受欢迎.

GBK 和 GB2312
GBK中的k是 ‘扩展’的意思,对GB2312...的扩展,更加全面;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值