2017-03-29 52 views
0

使用UTF-8編碼讀取有中國特色的xml文件我想讀一個.xml文件,它看起來像:問題RStudio

<?xml version="1.0" encoding="UTF-8"?> 
<province name="北京市" id="11"> 
    <city name="市轄區" id="110100000000"> 
    <county name="東城區" id="110101000000"> 
     <town name="珍珠泉鄉" id="110229214000"> 
     <village name="珍珠泉鄉社區居委會" id="110229214001" type="220"/> 
     <village name="珍珠泉村委會" id="110229214200" type="210"/> 
     <village name="稱溝灣村委會" id="110229214201" type="220"/> 
     <village name="廟梁村委會" id="110229214202" type="220"/> 
     <village name="下水溝村委會" id="110229214203" type="220"/> 
     <village name="上水溝村委會" id="110229214204" type="220"/> 
     <village name="下花樓村委會" id="110229214205" type="220"/> 
     <village name="八畝地村委會" id="110229214206" type="220"/> 
     <village name="轉山子村委會" id="110229214207" type="220"/> 
     <village name="水泉子村委會" id="110229214208" type="220"/> 
     <village name="雙金草村委會" id="110229214209" type="220"/> 
     <village name="小川村委會" id="110229214210" type="220"/> 
     <village name="小鋪村委會" id="110229214211" type="220"/> 
     <village name="倉米道村委會" id="110229214212" type="220"/> 
     <village name="南天門村委會" id="110229214213" type="220"/> 
     <village name="桃條溝村委會" id="110229214214" type="220"/> 
     </town> 
    </county> 
    </city> 
</province> 

我設置使用Sys.setlocale("LC_ALL", locale="Chinese (Simplified)")系統區域設置爲簡化中國人,和讀使用XML封裝,UTF-8編碼doc = xmlParse(files[i], encoding = "UTF-8", useInternalNodes = TRUE)文件,但是當我看到doc,無法正常顯示中國漢字:

<village id="110229214001" type="220" name="鐝嶇彔娉変埂紺懼尯灞呭浼?/> 
     <village id="110229214200" type="210" name="鐝嶇彔娉夋潙濮斾細"/> 
     <village id="110229214201" type="220" name="縐版矡婀炬潙濮斾細"/> 
     <village id="110229214202" type="220" name="搴欐鏉戝浼?/> 
     <village id="110229214203" type="220" name="涓嬫按娌熸潙濮斾細"/> 
     <village id="110229214204" type="220" name="涓婃按娌熸潙濮斾細"/> 
     <village id="110229214205" type="220" name="涓嬭姳妤兼潙濮斾細"/> 
     <village id="110229214206" type="220" name="鍏憨鍦版潙濮斾細"/> 
     <village id="110229214207" type="220" name="杞北瀛愭潙濮斾細"/> 
     <village id="110229214208" type="220" name="姘存硥瀛愭潙濮斾細"/> 
     <village id="110229214209" type="220" name="鍙岄噾鑽夋潙濮斾細"/> 
     <village id="110229214210" type="220" name="灝忓窛鏉戝浼?/> 
     <village id="110229214211" type="220" name="灝忛摵鏉戝浼?/> 
     <village id="110229214212" type="220" name="浠撶背閬撴潙濮斾細"/> 
     <village id="110229214213" type="220" name="鍗楀ぉ闂ㄦ潙濮斾細"/> 
     <village id="110229214214" type="220" name="妗冩潯娌熸潙濮斾細"/> 

我也試過系統區域設置爲English_United States.1252,BU問題依然存在。 奇怪的是,當我使用doc以上的一些函數時,例如xmlRoot(doc)getNodeSet(doc,"//village")[1],漢字顯示正確。但不是所有的功能,如果我使用xmlAttrs(getNodeSet(doc,"//village")[[1]]),它有問題。

回答

0

嘗試XML LINQ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.IO; 

namespace ConsoleApplication49 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      StreamReader reader = new StreamReader(FILENAME); 
      var z = reader.ReadLine(); 

      XDocument doc = XDocument.Load(reader); 

      var results = doc.Descendants("village").Select(x => new 
      { 
       name = (string)x.Attribute("name"), 
       id = (long)x.Attribute("id"), 
       type = (int)x.Attribute("type") 
      }).ToList(); 

     } 
    } 
} 
+0

我GOOGLE了一下,它似乎是LINQ查詢。我應該在哪裏放入並運行這些命令?我對此很陌生。 –

+0

是的,它是一個XML Linq(XDocument類)。只要將代碼像其他代碼一樣對待。沒有什麼特別的需要。 – jdweng

+0

我試圖運行R中的代碼時出現錯誤消息錯誤:「使用系統」中的意外符號。我需要安裝一些軟件包嗎? –

0

這似乎是與編碼的問題。我的目標是從xml文件中提取村莊信息。提取信息後,當我檢查村名欄的編碼時,顯示編碼爲"unknown"。所以我添加了一個命令,將該列的編碼設置爲「UTF-8」,並且它可以工作。我的代碼如下所示。

但我仍然不知道爲什麼編碼是未知的。當我使用xmlParse()讀取xml文件時,我已經在最初指定了encoding="UTF-8。有人知道爲什麼當我讀取xml文件時是否犯了錯誤?

> village = as.data.frame(t(xmlSApply(doc["/province/city/county/town/village"],xmlAttrs)),stringsAsFactors=FALSE) 
> View(village) 
> Encoding(village[1,"name"]) 
[1] "unknown" 
> Encoding(village[,"name"])="UTF-8" #added this line and the display is fine now