<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>乱码 on 格物堂</title><link>https://gewutang.cn/tags/%E4%B9%B1%E7%A0%81/</link><description>Recent content in 乱码 on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 13 Sep 2012 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/%E4%B9%B1%E7%A0%81/index.xml" rel="self" type="application/rss+xml"/><item><title>乱码，又见乱码</title><link>https://gewutang.cn/2012/09/13/junk-code-again/</link><pubDate>Thu, 13 Sep 2012 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2012/09/13/junk-code-again/</guid><description>&lt;p&gt;在Windows系统下，用readHTMLTable函数读取编码为unicod的网页时会出现乱码。这个时候的乱码是因为R是用本地码（通常是GBK）来解释了网页中的unicode，因此出现了符号不兼容。此时，只要用iconv(x,&amp;ldquo;utf-8&amp;rdquo;,&amp;ldquo;gbk&amp;rdquo;)就可以了。然而，有时候会出现另外一种情况：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(XML);&#10;url=&amp;quot;http://data.caixin.com/macro/macro_indicator_more.html?id=F0001&amp;amp;cpage=2&amp;amp;pageSize=30&amp;amp;url=macro_indicator_more.html#top&amp;quot;;&#10;tables=readHTMLTable(url)&#10;head(tables)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;这种情况下icnov好像就无能为力了。不过，事情还是有解决方案的，在readHTMLTable之前加上一句代码就可以了。&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;url= htmlParse(url,encoding=&amp;quot;UTF-8&amp;quot;)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;看看效果：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code class="language-r"&gt;library(XML)&#10;url &amp;lt;- &amp;quot;http://data.caixin.com/macro/macro_indicator_more.html?id=F0001&amp;amp;cpage=2&amp;amp;pageSize=30&amp;amp;url=macro_indicator_more.html#top&amp;quot;&#10;url&amp;lt;- htmlParse(url,encoding=&amp;quot;UTF-8&amp;quot;)&#10;tables &amp;lt;- readHTMLTable(url)&#10;head(tables)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;</description></item><item><title>棘手的R乱码和给力的iconv函数</title><link>https://gewutang.cn/2012/05/09/iconv-and-r/</link><pubDate>Wed, 09 May 2012 00:00:00 +0000</pubDate><guid>https://gewutang.cn/2012/05/09/iconv-and-r/</guid><description>&lt;p&gt;从网上抓数据（网页是&lt;code&gt;utf-8&lt;/code&gt;编码）时，发现读入R的数据出现了乱码。代码和返回结果分别如下：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;library(XML)&#10;id=&amp;quot;000002&amp;quot;&#10;year=&amp;quot;2011&amp;quot;&#10;web=paste(&amp;quot;http://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/&amp;quot;,id,&amp;quot;/ctrl/&amp;quot;,year,&amp;quot;/displaytype/4.phtml&amp;quot;,sep=&amp;quot;&amp;quot;)&#10;web&#10;[1] &amp;quot;http://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/000002/ctrl/2011/displaytype/4.phtml&amp;quot;&#10;tables head(tables)&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;pre&gt;&lt;code&gt;涓囩A(000002) 璐一姟镌囨爣 NA&#10;1 鎶ュ憡镞ユ湡 2011-12-31&#10;2 姣忚偂镌囨爣&#10;3 鎽婅杽姣忚偂鏀剁泭(鍏\x83) 1.055&#10;4 锷犳潈姣忚偂鏀剁泭(鍏\x83) 0.88&#10;5 姣忚偂鏀剁泭_璋冩暣鍚\x8e(鍏\x83) 0.88&#10;6 镓ｉ櫎闱炵粡甯告ф崯鐩婂悗镄勬疮镶℃敹鐩\x8a(鍏\x83) 0.87&#10;NA NA NA&#10;1 2011-09-30 2011-06-30 2011-03-31&#10;2&#10;3 0.3735 0.2958 0.1082&#10;4 0.326 0.27 0.11&#10;5 0.326 0.27 0.11&#10;6 0.321 0.27&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;去COS咨询了一番，都说运行完我提供的代码之后没有出现乱码。当时的我有些凌乱。心中苦闷得很，难道R代码的运行结果还跟运行者相关么？如果R语言真能发展到如此智能的地步，我定然乐不可支。当然，这是题外话了，按住不说。&lt;/p&gt;&#10;&lt;p&gt;于是，我泡在论坛上翻了无数旧帖，最终发现了李舰和陈丽云讨论的结果。他们说R中出现乱码后可以用&lt;code&gt;Encoding&lt;/code&gt;来解决。在这个原则指导下我各种&lt;code&gt;Encoding&lt;/code&gt;，却回回都是无功而返。思考再三，我觉得可能是电脑的问题。&lt;/p&gt;&#10;&lt;p&gt;只是电脑的问题那么多，根源在哪儿呢？我贴出了自己的&lt;code&gt;sessionInfo&lt;/code&gt;，想找出问题的根源。幸好有人跟帖也贴出了sessionInfo。对比之下才发现问题出在电脑系统的内部编码上。他们几人所用的都是Linux平台，内部编码设定都是utf。而我苦苦耗在的Windows平台上，系统的内部编码是gbk。&lt;/p&gt;&#10;&lt;p&gt;好了，找到了病根。下一步只要修改一下Windows系统的内部编码就行了。我正欢欣鼓舞呢，颜林林却说，Windows系统没法修改系统编码。好吧!我就像一个病人在熟读各种医书终于发现病根所在之时，却被告知没有药材。绝望之情状如井喷。&lt;/p&gt;&#10;&lt;p&gt;至此，我几近投奔Linux了。结果，无意中见到一个人用iconv函数解决类似的问题。看起来效果不错，我就尝试了一下：&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;rownames(tables)&amp;lt;-iconv(tables[,1],&amp;quot;UTF-8&amp;quot;,&amp;quot;gbk&amp;quot;)&#10;head(tables[,-1])&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;虽然不知道什么原理，但问题毕竟是解决了。&lt;/p&gt;&#10;</description></item></channel></rss>