Ruby ruby 中 url encode from GB2312 的问题

flowerwrong · August 20, 2014 · Last by noob replied at May 20, 2016 · 6080 hits

问题描述:我想把一个名字 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 Floor has deleted

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

You need to Sign in before reply, if you don't have an account, please Sign up first.