Ruby ruby 中 url encode from GB2312 的问题

flowerwrong · 2014年08月20日 · 最后由 noob 回复于 2016年05月20日 · 6095 次阅读

问题描述:我想把一个名字 encode,但是不论我使用哪个 encode 函数,encode 后的结果都说 utf8 的,而不是 GB2312 的。我的目的是得到 gb2312 的编码结果,即%d1%ee%b8%a1%c9%fa 在线编码工具:http://tool.chinaz.com/Tools/URLEncode.aspx 代码:

# -*- coding: UTF-8 -*-
require 'open-uri'

name = "杨浮生"
puts name.encoding.name
# UTF-8编码结果 %E6%9D%A8%E6%B5%AE%E7%94%9F
# GB2312编码结果 %d1%ee%b8%a1%c9%fa
puts URI::encode name

我将# -*- coding: UTF-8 -*-改为# -*- coding: GBK -*-但是报错

gbken.rb:4: invalid multibyte char (GB2312)
gbken.rb:4: invalid multibyte char (GB2312)

只是修改 coding 标记名是不行的,文件本身的存储依然是 UTF-8,所以直接就报错。

可以保持 coding: UTF-8 不变,将待转换的字符串编码成 GB2312(name = name.encode('gb2312', 'utf-8')),然后再 URI::encode 应该就可以了

#1 楼 @lonre thx very much 顺便说一下

"str".force_encoding("gbk")

这样是没用的!!!

#2 楼 @flowerwrong 额,我么有提 force_encoding

#3 楼 @lonre 没,我是告诉其他人而已,u r right.

5 楼 已删除

URI::encode(Iconv.conv('UTF-8//IGNORE', 'GB2312', "#{name}"))

需要 登录 后方可回复, 如果你还没有账号请 注册新账号