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...的扩展,更加全面;
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...的扩展,更加全面;