长期以来,都被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/
我敢肯定,这出现了仅仅是字符问题中很小的一个,而且是很好解决的一个,但是我起码有信心了,遇到关于字符的问题不会再逃避了,关键是逃避也没有用!既然逃避没用,那就消灭它们!
分享到:
相关推荐
- GIGO gem 旨在不惜一切代价修复 ruby 字符串编码! GIGO gem 不太可能是正确的解决方案。 如果您的数据库中有错误的编码,您应该修复它们并编写一致的编码。 也就是说,如果您别无选择,GIGO 可以提供帮助。...
各类编码转换,从unicode 到 Shift-JIS
Ruby 注释 注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行。您可以在行首使用字符( # ): # 我是注释,请忽略我。 或者,注释可以跟着语句...Ruby 中文编码 用 Ruby 输出 “Hello, World!”,英文没
RUBY版本:ruby 2.1.1p76(这受cloud9 IDE包含在其服务器上的限制) 我们将创建各种编码挑战和答案。 从命令行运行“ rspec”将执行测试。 通读故障,将使您对编码内容有所了解。 第一个规范文件是关于字符串...
Ruby的编码检测。 gem install rchardet 用法 require 'rubygems' require 'rchardet' cd = CharDet . detect ( some_data ) encoding = cd [ 'encoding' ] confidence = cd [ 'confidence' ] # 0.0 <= ...
该程序可能使用三种方法编码器:一种通过基于“移位器”“移位”用户生成的字符串中的每个字母来对用户字符串进行编码的方法解码器:一种通过了解移位器将编码后的密码解码回用户字符串的方法。 SHIFTER:一种随机...
2.4程序的编码36 2.5RUBY程序的运行39 第3章数据类型和对象41 3.1数字42 3.2文本46 3.3数组64 3.4哈希67 3.5范围68 3.6符号71 3.7TRUE、FALSE和NIL72 3.8对象72 第4章表达式和操作符85 ...
rsmaz (原始C版本)描述: Ruby的短字符串压缩。 RSmaz是Salvatore Sanfilippo的Smaz短字符串压缩算法的纯Ruby端口... decompress ( r ) Ruby 1.9和编码¶ ↑ RSmaz.compress始终返回具有二进制编码的字符串。 输入可
1.在脚本中直接以字面量的形式定义 2.从程序的外部获得(文件,控制台,网络等),数据的获取方式,决定了他的编码方式 1.脚本编码—决定字面量字符串对象编码的信
重装Ruby Ruby中用于数组,哈希,可枚举,字符串,对象和日期的有用方法和猴子补丁的集合。 通过使生活更轻松和编码更自然而受到驱动。 该库与其他库之间的区别在于,所有猴子修补均以选择加入的方式执行,因为您不...
主要介绍了Ruby中XML格式数据处理库REXML的使用方法指南,值得注意的REXML库处理XML字符串时的编码问题,是需要的朋友可以参考下
Ruby test codes 1. leetcode: Intruction to Ruby 2. Seven Languages in Seven Weeks 3. runoob ruby tutorial lessons 4. Learn Ruby the Hard Way, 3rd Edition 5. Programming Ruby, The Ruby Programming ...
我最初写这个是为了在在 rails 控制器上的 ruby 中写入包含非 ascii 字符(如 éöàüèä)的字符串时摆脱“无效的多字节字符(US-ASCII)”错误 安装 gem install magic_encoding 用法 您可以使用像这样的...
在当前打开的编辑器上(右键单击代码中的Add #encoding utf-8位置,然后Add #encoding utf-8或转到包,然后为 Ruby 自动编码),在选定的文件上(在树视图中,右键单击然后在文件中Add #encoding utf-8 )或在选定...
一个 ruby 命令行工具,用于在字符串与各种编码之间进行转换。 变更日志 版本 1.1 添加了二进制和ascii之间的两种方式转换 稍微整理了一下菜单 安装 git clone https://github.com/gabemarshall/enigma.git ...
例如,将小整数(如标志或错误代码)编码为单个字节,并且典型的短字符串除字符串本身外仅需要一个额外的字节。 如果您曾经想使用JSON来获得便利(使用元数据存储图像),但又出于技术原因(二进制数据,大小,速度...
该gem主要用于处理用户生成的内容中的表情符号字符。 根据您的技术堆栈,这些字符可能最终会丢失。用法Rumoji.encode(str)# Takes a String, transforms Emoji into cheat-sheet codesRumoji.encode(str) { |emoji|...
它还可以正确编码所有字符串和二进制数据。 TinyTDS的动机是成为用于ActiveRecordSQL Server适配器的事实上的低级连接模式。 该API很简单,由以下类组成: TinyTds :: Client-您与数据库的连接。 TinyTds :: ...
Ruby编码练习使用Ruby解决的简单编码练习的存储库。 每个示例均由用RSpec编写的测试用例...ö范围内的字母数字和特殊字符最长字计算器查找带有分隔符的句子中最长的单词,默认为空格查找集合中最长的作品(单词数组)