在ruby中和java类似
当在支付串中默认打如unicode字符是自动生成为汉字。如:
s = "\u5473\u9053\u4e0d\u9519"
p s
#=> "看见"
当通过程序进行数据的采集时,如数据本身就是\u9519时,则数据是无法进行转换的,因为在数据的详细信息时是\\u519,在通过字符的替换,s.to_s.gsub(/\\/, '\'),一定是会报错的,所以在程序中这让我头疼了好长一段时间。
下面是解决办法。
先将\\转换为%进行数据的校验s.to_s.gsub(/\\/, '%')
require 'cgi'
require 'iconv'
def uncode_unicodebi_utf(string)
a=string
c=""
b=a.split('%u')
i=0
b.each do |now|
#puts now
i+=1
(now=CGI.unescape(now);c+=now;next) if(i==1)
p=now
test1=p[0,4]
test=now[0,4]
test.insert(0,'%')
test.insert(3,'%')
test=CGI.unescape(test)
test=Iconv.conv("gb2312","unicodebig",test)
now.sub!(test1,test)
c+=now
end
return c.to_s.encode("utf-8")
end
s="%u4EBAabcdef%u4EBA%u4EBA"
puts uncode_unicodebi_utf(s)
生成结果为
人abcdef人人