使用 Rails 2.3.9 解决 Unicode 问题?转换一个简单的字符串
我正在使用 Twitter API 和官方 ruby gem 包装器。
当我执行 Twitter::Search.new("keywords") 时。它返回一个带有文本字段的散列,如下所示:
text: "Merci @Isabouriaud @nicod92160 @NicolasAtger Watson "une des r\u00E9alizes"
我知道这是 unicode,但找不到以纯文本格式转换此字符串的方法在 ruby 中,它与我的数据库无关,因为我立即显示推文......
我只需要转换“r\u00E9alizes”的函数在“实现”中
我尝试过: ActiveSupport::JSON.decode("\"\u00E9\"") =>;埃 但 ActiveSupport::JSON.decode("\"\invit\u00E9\"") != invité (我想要的方式)
有什么想法吗?
多谢。
解决方案
我必须使用最新的 json gem 并用它解析它。 Rails 2.3 当前的 twitter gem 可能不再是最新的了。
我认为另一个解决方案是升级到Rails 3并使用force_encoding方法。
class TwitterWrapper
def self.base
"http://search.twitter.com"
end
#json_string.gsub!(/\\u([0-9a-z]{4})/) {|s| [$1.to_i(16)].pack("U")}
def self.search(keyword)
keyword = keyword.gsub(" ","%20")
read("#{base}/search.json?q=#{keyword}")["results"]
end
private
def self.read(url)
JSON.parse(Net::HTTP.get(URI.parse(url)))
end
end
I'm using the Twitter API with the official ruby gem wrapper.
When I do Twitter::Search.new("keywords"). It returns a hash with a text field that look likes this:
text: "Merci @Isabouriaud @nicod92160 @NicolasAtger Watson "une des r\u00E9alisations"
I know this is unicode but couldn't find a way to convert this string in plain text in ruby. It has nothing to do with my database since I'm showing the tweets right away...
I just need the function to convert "r\u00E9alisations" in "réalisations"
I tried:
ActiveSupport::JSON.decode("\"\u00E9\"") => é
but
ActiveSupport::JSON.decode("\"\invit\u00E9\"") != invité (how I want it)
Any idea?
Thanks a lot.
Solution
I had to use the latest json gem and parse it with it. The current twitter gem for rails 2.3 is probably not up-to-date anymore.
I think an other solution would be to upgrade to Rails 3 and use the force_encoding method.
class TwitterWrapper
def self.base
"http://search.twitter.com"
end
#json_string.gsub!(/\\u([0-9a-z]{4})/) {|s| [$1.to_i(16)].pack("U")}
def self.search(keyword)
keyword = keyword.gsub(" ","%20")
read("#{base}/search.json?q=#{keyword}")["results"]
end
private
def self.read(url)
JSON.parse(Net::HTTP.get(URI.parse(url)))
end
end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您看到的是 ruby 终端中 unicode 字符串的呈现形式。如果将其写入文件并使用支持 unicode 的编辑器打开它,则重音应该看起来不错。
您可以设置 $KCODE = 'UTF-8' 来修复终端的此问题。
What you see is the prepresentation of the unicode string in the ruby terminal. If you write it to a file and open it with some editor with unicode support, the accent should look fine.
You can set $KCODE = 'UTF-8' to fix this for the terminal.