`
sitoto
  • 浏览: 120107 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

unescape编码错误

    博客分类:
  • ruby
阅读更多
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 和多字节编码。与普通的多字节编码不同,UTF-8的字节长度不固定,对于ASCII, 字节长度为1, 对于中文,阿拉伯文等,可以是2,3或更多字节,这样能有效节省存储空间. 它还与很多传统编码标准兼容,所以很受欢迎.

GBK 和 GB2312
GBK中的k是 ‘扩展’的意思,对GB2312...的扩展,更加全面;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics