<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Icnov on 格物堂</title><link>https://gewutang.cn/tags/icnov/</link><description>Recent content in Icnov on 格物堂</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Wed, 09 May 2012 00:00:00 +0000</lastBuildDate><atom:link href="https://gewutang.cn/tags/icnov/index.xml" rel="self" type="application/rss+xml"/><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>