使用 Rails 2.3.9 解决 Unicode 问题?转换一个简单的字符串

发布于 2024-12-17 17:11:32 字数 1085 浏览 2 评论 0原文

我正在使用 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.
enter image description here

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

标点 2024-12-24 17:11:32

您看到的是 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文