<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>xofred2 (xofred)</title>
    <link>https://ruby-china.org/xofred2</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>[已解决] ruby 命令行调用 jar 包中文传参的乱码问题</title>
      <description>&lt;h3 id="解决"&gt;解决&lt;/h3&gt;
&lt;p&gt;在 google 搜&lt;code&gt;ruby execute jar encoding，&lt;/code&gt;参考了&lt;a href="https://github.com/jruby/warbler/issues/368" rel="nofollow" target="_blank" title=""&gt;Need to specify -Dfile.encoding when executing jar created by Warbler #368&lt;/a&gt;试试，发现的确是编码问题，java 执行时要用&lt;code&gt;-Dfile.encoding=UTF-8&lt;/code&gt;显示指定编码&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;sign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popen&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s2"&gt;"java"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"-Dfile.encoding=UTF-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"-jar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/lib/RSA_UTF.jar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后中文就能正常识别了，之前丢进去 java 的 main 函数会变成问号&lt;/p&gt;

&lt;hr&gt;
&lt;h3 id="问题"&gt;问题&lt;/h3&gt;
&lt;p&gt;有个地方需要用合作方提供的签名程序生成签名。由于程序是个 jar 包，我用&lt;code&gt;IO.popen&lt;/code&gt;调用&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# key 固定&lt;/span&gt;
&lt;span class="c1"&gt;# message 参数Hash to_json&lt;/span&gt;
&lt;span class="n"&gt;sign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;IO&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;popen&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s2"&gt;"java"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"-jar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/lib/sign.jar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;并把参数和签名输出到日志&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;D, [2017-01-11T17:04:52.852529 #3898] DEBUG -- : message:
D, [2017-01-11T17:04:52.852572 #3898] DEBUG -- : {"touristList":[{"name":"fu/ting","firstname":"fu","lastname":"ting","psptType":"2","psptId":"quirky","birthday":"1990-12-22","tel":"","touristType":0,"psptEndDate":"2025-12-22","sex":1,"hkvisaType":0,"macvisaType":0,"hkmacIssueOrgan":"","issueOrgan":"0","country":"中国"}]}
D, [2017-01-11T16:57:37.236836 #3898] DEBUG -- : sign:
D, [2017-01-11T16:57:37.236836 #3898] DEBUG -- : lQHTGqE0nLjy3Z6OTlIULT3pvdvizWgoLg2qZFM1BIJ80ERlrdudKCvm8Rgbs9LqsDs3SPfjRXWOJvEJUW0PMg==
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;发现只要参数里面包含中文的话，生成的签名就不对。&lt;/p&gt;

&lt;p&gt;但是，当我把日志的参数原封不动复制到 rails c 执行时，生成的签名却是对的。。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;message:
{"touristList":[{"name":"fu/ting","firstname":"fu","lastname":"ting","psptType":"2","psptId":"quirky","birthday":"1990-12-22","tel":"","touristType":0,"psptEndDate":"2025-12-22","sex":1,"hkvisaType":0,"macvisaType":0,"hkmacIssueOrgan":"","issueOrgan":"0","country":"中国"}]}
sign:
Yi7thHvFlJZ45s4bXPMqK2JPN0BELF7HyJrWs6wETrkmGJI24DcEctO8/ribSAGSr6Z/AdA0qXOu7K/nNFBR+Q==
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;想不通&lt;/p&gt;</description>
      <author>xofred2</author>
      <pubDate>Wed, 11 Jan 2017 17:14:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/32105</link>
      <guid>https://ruby-china.org/topics/32105</guid>
    </item>
    <item>
      <title>有人用过 PUSHER 吗？就是推送消息到网页的那个 API 服务</title>
      <description>&lt;p&gt;我按着教程&lt;a href="http://vimeo.com/30796067" rel="nofollow" target="_blank" title=""&gt;Realtime Spine &amp;amp; Rails apps&lt;/a&gt;做，进行预先绑定的事件（例如增改删）后，能在 PUSHER 控制台看到 API 推送。但本地网页要刷新后才见到，正常的话应该不用刷新马上见到才对。。。&lt;/p&gt;</description>
      <author>xofred2</author>
      <pubDate>Thu, 30 May 2013 19:19:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/11356</link>
      <guid>https://ruby-china.org/topics/11356</guid>
    </item>
    <item>
      <title>Using sed</title>
      <description>&lt;p&gt;&lt;a href="http://book.douban.com/subject/1741933/" rel="nofollow" target="_blank" title=""&gt;sed &amp;amp; awk&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="单命令"&gt;单命令&lt;/h4&gt;
&lt;p&gt;原内容：
EPISODE #413 – Apr 10, 2013 – 14 comments
...&lt;/p&gt;

&lt;p&gt;输入&lt;code&gt;sed 's/Apr/April/' test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;会在屏幕输出：
EPISODE #413 – April 10, 2013 – 14 comments
...&lt;/p&gt;

&lt;p&gt;其中&lt;code&gt;sed 's/Apr/April/' test&lt;/code&gt;的&lt;code&gt;'s/Apr/April/'&lt;/code&gt;并不一定要用单引号括住，但好的习惯是括住它，理由同 ruby 的&lt;code&gt;p&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;例如如果这样写&lt;code&gt;sed 's/ Apr/ April/' test&lt;/code&gt;就必须括住了，因为空格是特殊字符&lt;/p&gt;
&lt;h4 id="多个命令"&gt;多个命令&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;可以用分号隔开，例如&lt;code&gt;sed 's/Apr /April /; s/Mar /March /' test&lt;/code&gt;
EPISODE #413 – April 10, 2013 – 14 comments
...
EPISODE #411 – March 27, 2013 – 20 comments
...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;用-e 参数也行&lt;code&gt;sed -e 's/Apr /April, /' -e 's/Mar /March, /' test&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;还可以分行输入
&lt;code&gt;sed '&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;s/ Mar / March, /
s/ Apr / April, /' test&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;（目前为止的改动不会影响 test 文件）&lt;/p&gt;

&lt;hr&gt;
&lt;h4 id="调用脚本执行"&gt;调用脚本执行&lt;/h4&gt;
&lt;p&gt;假如命令较多，应将命令存为脚本文件，就像这个&lt;code&gt;cat sedscr&lt;/code&gt;
s/Apr /April, /
s/Mar /March, /
s/Feb /February, /&lt;/p&gt;

&lt;p&gt;然后用-f 参数调用&lt;code&gt;sed -f sedscr test&lt;/code&gt;
EPISODE #413 – April, 10, 2013 – 14 comments
...
EPISODE #411 – March, 27, 2013 – 20 comments
...
EPISODE #165 – February, 25, 2013 – 32 comments
...
（以上的改动同样不会影响 test 文件）&lt;/p&gt;

&lt;hr&gt;
&lt;h4 id="保存修改"&gt;保存修改&lt;/h4&gt;
&lt;p&gt;如果想保存所作的改动，可以保存至另一个文件&lt;code&gt;sed -f sedscr test &amp;gt; newlist&lt;/code&gt;
（顺带一提，&lt;code&gt;sed -f sedscr test &amp;gt; test&lt;/code&gt;企图保存至原文件的话，test 会被清空。。。）&lt;/p&gt;

&lt;hr&gt;
&lt;h4 id="只显示有改动的内容"&gt;只显示有改动的内容&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;sed -n -e 's/Apr/April/p' test&lt;/code&gt;
EPISODE #413 – April 10, 2013 – 14 comments
EPISODE #412 – April 04, 2013 – 30 comments&lt;/p&gt;</description>
      <author>xofred2</author>
      <pubDate>Tue, 16 Apr 2013 10:35:51 +0800</pubDate>
      <link>https://ruby-china.org/topics/10235</link>
      <guid>https://ruby-china.org/topics/10235</guid>
    </item>
  </channel>
</rss>
