<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yiluo (伊洛)</title>
    <link>https://ruby-china.org/yiluo</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>想知道 Ruby 对 Redis 中文数据的编码处理</title>
      <description>&lt;p&gt;小白在写一个小博客遇上了点麻烦，我将博客的错误部分用下面的代码复现了一下。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'sinatra'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'redis'&lt;/span&gt;

&lt;span class="vg"&gt;$redis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="no"&gt;ERB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Util&lt;/span&gt;

&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
 &lt;span class="n"&gt;erb&lt;/span&gt; &lt;span class="ss"&gt;:index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:locals&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;hash: &lt;/span&gt;&lt;span class="vg"&gt;$redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'content:1'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Redis 那边是这样的&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;user@domain:~# redis-cli &lt;span class="nt"&gt;--raw&lt;/span&gt;
127.0.0.1:6379&amp;gt; get content:1
哈哈
127.0.0.1:6379&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;views 下 erb 文件长这样&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv=&lt;/span&gt;&lt;span class="s"&gt;"X-UA-Compatible"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"ie=edge"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Document&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="nb"&gt;hash&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行 ruby，浏览器打开 '/' 提示错误&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;2016-08-20 09:02:07 - Encoding::CompatibilityError - incompatible character encodings: UTF-8 and US-ASCII:
    /root/test/views/index.erb:12:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;singleton class&lt;span class="s1"&gt;'
    /root/test/views/index.erb:-6:in `instance_eval'&lt;/span&gt;
    /root/test/views/index.erb:-6:in &lt;span class="sb"&gt;`&lt;/span&gt;singleton class&lt;span class="s1"&gt;'
    /root/test/views/index.erb:-8:in `__tilt_11968560'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/tilt-2.0.5/lib/tilt/template.rb:167:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/tilt-2.0.5/lib/tilt/template.rb:167:in `evaluate'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/tilt-2.0.5/lib/tilt/template.rb:102:in &lt;span class="sb"&gt;`&lt;/span&gt;render&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:823:in `render'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:667:in &lt;span class="sb"&gt;`&lt;/span&gt;erb&lt;span class="s1"&gt;'
    app.rb:13:in `block in &amp;lt;main&amp;gt;'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1611:in `block in compile!'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="o"&gt;(&lt;/span&gt;3 levels&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in &lt;/span&gt;route!&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:994:in `route_eval'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:975:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="o"&gt;(&lt;/span&gt;2 levels&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in &lt;/span&gt;route!&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1015:in `block in process_route'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:in &lt;span class="sb"&gt;`&lt;/span&gt;catch&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1013:in `process_route'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:973:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;route!&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:in `each'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:972:in &lt;span class="sb"&gt;`&lt;/span&gt;route!&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1085:in `block in dispatch!'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;invoke&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `catch'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in &lt;span class="sb"&gt;`&lt;/span&gt;invoke&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1082:in `dispatch!'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;call!&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `block in invoke'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in &lt;span class="sb"&gt;`&lt;/span&gt;catch&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1067:in `invoke'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:907:in &lt;span class="sb"&gt;`&lt;/span&gt;call!&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:895:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-protection-1.5.3/lib/rack/protection/xss_header.rb:18:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-protection-1.5.3/lib/rack/protection/path_traversal.rb:16:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-protection-1.5.3/lib/rack/protection/json_csrf.rb:18:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-protection-1.5.3/lib/rack/protection/base.rb:49:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-protection-1.5.3/lib/rack/protection/frame_options.rb:31:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/logger.rb:15:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/commonlogger.rb:33:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:219:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:212:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/head.rb:13:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/show_exceptions.rb:25:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:182:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:2013:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in `block in call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1787:in &lt;span class="sb"&gt;`&lt;/span&gt;synchronize&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:86:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;pre_process&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:84:in `catch'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:84:in &lt;span class="sb"&gt;`&lt;/span&gt;pre_process&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:50:in `block in process'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/eventmachine-1.2.0.1/lib/eventmachine.rb:1076:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;spawn_threadpool&lt;span class="s1"&gt;'
Unexpected error while processing request: invalid byte sequence in US-ASCII
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/utils.rb:249:in `gsub'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/utils.rb:249:in &lt;span class="sb"&gt;`&lt;/span&gt;escape_html&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/showexceptions.rb:103:in `h'&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;erb&lt;span class="o"&gt;)&lt;/span&gt;:169:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="o"&gt;(&lt;/span&gt;2 levels&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in &lt;/span&gt;pretty&lt;span class="s1"&gt;'
    (erb):168:in `each'&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;erb&lt;span class="o"&gt;)&lt;/span&gt;:168:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;pretty&lt;span class="s1"&gt;'
    (erb):155:in `each'&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;erb&lt;span class="o"&gt;)&lt;/span&gt;:155:in &lt;span class="sb"&gt;`&lt;/span&gt;pretty&lt;span class="s1"&gt;'
    /usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/erb.rb:864:in `eval'&lt;/span&gt;
    /usr/local/rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/erb.rb:864:in &lt;span class="sb"&gt;`&lt;/span&gt;result&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/showexceptions.rb:97:in `pretty'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/show_exceptions.rb:34:in &lt;span class="sb"&gt;`&lt;/span&gt;rescue &lt;span class="k"&gt;in &lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/show_exceptions.rb:25:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:182:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:2013:in `call'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1787:in `synchronize'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/sinatra-1.4.7/lib/sinatra/base.rb:1487:in &lt;span class="sb"&gt;`&lt;/span&gt;call&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:86:in `block in pre_process'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:84:in &lt;span class="sb"&gt;`&lt;/span&gt;catch&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:84:in `pre_process'&lt;/span&gt;
    /usr/local/rvm/gems/ruby-2.3.1/gems/thin-1.7.0/lib/thin/connection.rb:50:in &lt;span class="sb"&gt;`&lt;/span&gt;block &lt;span class="k"&gt;in &lt;/span&gt;process&lt;span class="s1"&gt;'
    /usr/local/rvm/gems/ruby-2.3.1/gems/eventmachine-1.2.0.1/lib/eventmachine.rb:1076:in `block in spawn_threadpool'&lt;/span&gt;

&lt;span class="k"&gt;**&lt;/span&gt;6.&lt;span class="k"&gt;*&lt;/span&gt;29.&lt;span class="k"&gt;*&lt;/span&gt;7.&lt;span class="k"&gt;***&lt;/span&gt; - - &lt;span class="o"&gt;[&lt;/span&gt;20/Aug/2016:09:02:08 &lt;span class="nt"&gt;-0400&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="s2"&gt;"GET /favicon.ico HTTP/1.1"&lt;/span&gt; 404 471 0.0114

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查发现 hash 的编码格式是 US-ASCII。目前的解决方法是在 erb 文件中用.force_encoding('utf-8') 的方法将变量 hash 改回 utf-8，显示正常。但我还有疑点没有解决。&lt;/p&gt;

&lt;p&gt;1.是什么导致了这个问题？
2.为什么同样的程序在 Debian GNU/Linux 7.11 下跑出现问题，在我本地 OS X10.11.5 上跑一点事都没有。
3.翻过论坛帖子，知道 Ruby 2.0 默认 Ruby 源文件的编码为 UTF-8，为什么它还会将中文解成 us-ascii
4.方法.force_encoding('utf-8') 真的是唯一解了吗？这只是一个复现小程序，放到更大的项目上每个变量都要转一下？&lt;/p&gt;

&lt;p&gt;————————————————————————————————————————————————————————
尝试过的解决方案
1.在程序代码第一行加上#encoding:UTF-8
2.虽然我知道 sinatra 的 default_encoding 是 utf-8，但是我还是写了一段&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;configure&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    &lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:default_encoding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'utf-8'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3.将 redis 升级到 3.2.3, Ruby 升级到 ruby-2.3.1&lt;/p&gt;

&lt;p&gt;谢谢指点&lt;/p&gt;</description>
      <author>yiluo</author>
      <pubDate>Sat, 20 Aug 2016 21:21:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/30867</link>
      <guid>https://ruby-china.org/topics/30867</guid>
    </item>
  </channel>
</rss>
