长期以来,都被Ruby中的字符乱码所困惑,但是一直高估了解决乱码出现的难度,所以一直不敢去真正的理解,导致问题一直存在。看来逃避不是办法,要勇敢的去面对,是解决该问题的时候了!
最近在看Leonard ricbardson &sam ruby合著的《RESTful web services》,很赞同书里面的观点。同时这本书同时给了我很多的启发,如何去了解以及使用那些提供了API的网站,虽然现在只能做些很小的客户端,仍然很有成就感。毕竟从不懂,到会用,到可以编写简单的客户端进步还是有点的。
言归正传。
看到 Ruby:rest-open-uri and net/http这一节的时候,看到书中举了一个例子
def print_my_recent_bookmarks(username,password)
response=open('http://api.del.icio.us/v1/posts/recent',
:http_basic_authentication=>[username,password])
xml=response.read
puts xml
document=REXML::Document.new(xml)
REXML::XPath.each(document,"/posts/post") do |e|
puts "#{e.attributes['description']}:#{e.attributes['href']}"
end
end
#username,password=ARGV
#unless username and password
# puts "USAGE:#{$0}[username][password]"
# exit
#end
print_my_recent_bookmarks(username,password)
例子当然是很简单的,就是返回最近在del.icio.us所提交的书签具体的API可以参见
http://delicious.com/help/api#posts_recent
返回的结果是出现了一堆乱码
鏈€杩戜娇鐢ㄧ殑涔︾:place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&folder=TOOLBAR&sort=12&excludeQueries=1&excludeItemIfParentHasAnnotation=livemark%2FfeedURI&maxResults=10&queryType=1
鏃犳爣棰樻枃妗?file:///C:/Documents%20and%20Settings/Administrator/%E6%A1%8C%E9%9D%A2/xx.html
鑾峰彇涔︾闄勫姞杞欢:http://zh-cn.add-ons.mozilla.com/zh-CN/firefox/bookmarks/
甯姪鍜屾暀绋?http://zh-cn.www.mozilla.com/zh-CN/firefox/help/
鍏充簬鎴戜滑:http://zh-cn.www.mozilla.com/zh-CN/firefox/about/
鑷畾涔?Firefox:http://zh-cn.www.mozilla.com/zh-CN/firefox/customize/
鏂版墜涓婅矾:http://zh-cn.www.mozilla.com/zh-CN/firefox/central/
鎴戜篃瑕佸弬涓?http://zh-cn.www.mozilla.com/zh-CN/firefox/community/
鑾峰彇涔︾闄勫姞椤?https://zh-cn.add-ons.mozilla.com/zh-CN/firefox/bookmarks/
很郁闷吖!
很显然,这是字符集解析出现了问题,然后我想,问题会不会出现在服务器那端,结果一看那边是utf-8,这应该不会有问题了,那么问题是出在客户端这一边了。出现乱码是因为我这边没有按照utf-8进行解析,通常是按照gbk来的,当然就会出现乱码了,服务器和客户端用的不是同一种语言嘛,那不出问题才怪呢!
问题清楚了,如何解决?到
http://www.ruby-doc.org/core/上找找,据说是要用iconv这个核心类其中的
Iconv.iconv(to, from, *strs)
Shorthand for
Iconv.open(to, from) { |cd|
(strs + [nil]).collect { |s| cd.iconv(s) }
}
这个方法。我也懒得自己写了,到javaeye上搜搜,我想这样的问题一定有人遇到过,那么一定有人把问题解决了,结果还真是看到了hooopo老兄早已注意到这个问题,还写了一篇
UTF8编码和正则表达式
我就直接把他的代码用上了
# To change this template, choose Tools | Templates
# and open the template in the editor.
#puts "Hello World"
require "open-uri"
require "rexml/document"
$KCODE='UTF-8'
require'iconv'
class String
def to_gbk
Iconv.iconv("GBK//IGNORE","UTF-8//IGNORE",self).to_s
end
def to_utf8
Iconv.iconv("UTF-8//IGNORE","GBK//IGNORE",self).to_s
end
end
def print_my_recent_bookmarks(username,password)
response=open('http://api.del.icio.us/v1/posts/recent',
:http_basic_authentication=>[username,password])
xml=response.read
#puts xml
document=REXML::Document.new(xml)
REXML::XPath.each(document,"/posts/post") do |e|
puts "#{e.attributes['description']}".to_gbk+":"+"#{e.attributes['href']}".to_gbk
end
end
#username,password=ARGV
#unless username and password
# puts "USAGE:#{$0}[username][password]"
# exit
#end
print_my_recent_bookmarks(username,password)
乱码就没有了,看得懂的东西出现了
About data mining in java:http://www.jdmp.org/
The Positive Legacy of C++ and Java:http://www.artima.com/weblogs/viewpost.jsp?thread=252441
彩字秀(czxiu.com) 在线生成彩字闪字趣味图片 QQ自定义表情 手机图片 非主流图片:http://www.czxiu.com/
Lifehacker, tips and downloads for getting things done:http://lifehacker.com/
最新头条:http://zh-cn.fxfeeds.mozilla.com/zh-CN/firefox/headlines.xml
访问最多:place:sort=8&maxResults=10
最近使用的书签:place:folder=BOOKMARKS_MENU&folder=UNFILED_BOOKMARKS&folder=TOOLBAR&sort=12&excludeQueries=1&excludeItemIfParentHasAnnotation=livemark%2FfeedURI&maxResults=10&queryType=1
无标题文档:file:///C:/Documents%20and%20Settings/Administrator/%E6%A1%8C%E9%9D%A2/xx.html
获取书签附加软件:http://zh-cn.add-ons.mozilla.com/zh-CN/firefox/bookmarks/
帮助和教程:http://zh-cn.www.mozilla.com/zh-CN/firefox/help/
关于我们:http://zh-cn.www.mozilla.com/zh-CN/firefox/about/
我敢肯定,这出现了仅仅是字符问题中很小的一个,而且是很好解决的一个,但是我起码有信心了,遇到关于字符的问题不会再逃避了,关键是逃避也没有用!既然逃避没用,那就消灭它们!
分享到:
相关推荐
本篇文章将详细介绍如何在Ruby 1.9环境中进行编码转换,包括如何查看字符串的编码信息、如何强制更改字符串的编码以及如何使用`encode`方法来进行实际的编码转换。 #### 一、获取字符串的当前编码 在Ruby 1.9中,...
这个库的灵感来源于Charlock Holmes,一个在Ruby语言中的字符编码检测工具,但它采用了更强大的底层实现,包括ICU(International Components for Unicode)和libmagic。 **ICU和libmagic** 1. **ICU**:这是一个...
本文将深入探讨Ruby语言中的类变量、全局变量、实例变量,以及多态的概念,并结合Ruby编码规范来阐述如何有效地编写代码。 一、类变量 类变量在Ruby中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的...
`charlock_holmes`是一个混合字符编码检测器,它使用了libmagic库,能够识别多种编码格式,包括Unicode和ASCII。在处理未知来源的数据时,这个库非常有用,因为它可以自动检测并转换编码。 `jcode`库则是Ruby的一个...
在Ruby编程语言中,处理Unicode字符串是一项常见的任务,尤其是在全球化和多语言应用的开发中。Unicode是一个广泛采用的标准,它包含世界上几乎所有的字符集,使得跨语言的数据交换变得可能。然而,由于Unicode的...
如果你在项目中使用了Ruby,那么添加Stringex作为依赖可以极大地提升你的字符串处理能力。通过阅读源码,你可以更深入地理解其实现原理,甚至可以根据自己的需求扩展它的功能。 总之,Stringex是Ruby开发者的一个...
在Ruby-Geocoder中,你可以通过提供一个字符串参数(如街道地址)来调用这个功能,它会返回一个包含经纬度的对象。例如: ```ruby result = Geocoder.search("1600 Amphitheatre Parkway, Mountain View, CA") puts...
每个字符串对象在Ruby中包含了两个关键的信息:**字符串数据本身**以及**该数据的字符编码**。这意味着即使是同一个字符串,根据不同的上下文,其编码方式可能会有所不同。 #### 1.2 创建字符串的方式 字符串在...
各类编码转换,从unicode 到 Shift-JIS
在IT行业中,尤其是在软件开发领域,字符编码是一个重要的议题,特别是在处理多语言支持时。Zawgyi-One是一种广泛用于缅甸语(Burmese)文本显示的非标准字体编码,但它与Unicode编码不兼容,这可能导致在不同系统或...
- **对象**:在Ruby中,每个实体都是对象,即使是数字或字符串也不例外。 - **封装**:通过私有方法和属性限制对外部的直接访问,保护内部状态。 - **继承**:允许子类继承父类的属性和方法,实现代码重用。 - **...
- GIGO gem 旨在不惜一切代价修复 ruby 字符串编码! GIGO gem 不太可能是正确的解决方案。 如果您的数据库中有错误的编码,您应该修复它们并编写一致的编码。 也就是说,如果您别无选择,GIGO 可以提供帮助。...
这些只是Ruby字符串处理的一部分特性,Ruby还提供了许多其他方法,如拼接(`+`运算符),重复(`*`运算符),切片(`[]`操作符),以及与正则表达式的配合使用等,使得字符串操作既高效又便捷。理解并熟练掌握这些方法对于...
在Ruby中,解析后的键将始终是字符串。 3. **生成JSON字符串** `JSON.generate`方法则将Ruby对象转换为JSON字符串。它可以处理哈希、数组、数值、字符串、布尔值、nil以及数组和哈希的嵌套结构。 4. **处理日期和...
Ruby-QRcode库是Ruby编程语言中用于生成和解析QR码的一个强大工具。QR码,全称为Quick Response Code(快速响应码),是一种二维条形码,可以存储各种数据,如文本、URL、联系人信息、日历事件等,并且在手机扫描...
Ruby 注释 注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行。您可以在行首使用字符( # ): # 我是注释,请忽略我。 或者,注释可以跟着语句...Ruby 中文编码 用 Ruby 输出 “Hello, World!”,英文没
之前的版本中,Ruby默认使用ASCII-8BIT编码,而在1.9.3中,它改为了UTF-8,这使得处理多语言文本变得更加便捷和准确。开发者可以更容易地处理和操作包含非ASCII字符的字符串,从而提升了国际化应用的开发体验。 ...