【问题标题】:Reading XML files in R: UTF-8 and Umlaut在 R 中读取 XML 文件:UTF-8 和变音符号
【发布时间】:2015-01-17 07:42:00
【问题描述】:

我想导入一些带有一些德语文本的 xml 文件,包括变音符号(如 ä、ö、ü、&、")。 但不知何故,我无法获得正确的导入。 我使用 RStudio 和 XML 包,这就是我所做的: 示例 XML 文件(来自维基百科的编辑示例):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis>
<titel>Wikipedia Städteverzeichnis</titel>
<eintrag>
<stichwort>Genf</stichwort>
<eintragstext>Genf ist der Sitz von ä ü ö &amp;...</eintragstext>
</eintrag>
</verzeichnis>

XML 文件的导入

doc <- xmlParse('data/example.xml', useInternalNodes=TRUE)

结果

> doc
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<verzeichnis>
  <titel>Wikipedia Städteverzeichnis</titel>
  <eintrag>
    <stichwort>Genf</stichwort>
   <eintragstext>Genf ist der Sitz von ä ü ö &amp;...</eintragstext>
  </eintrag>
</verzeichnis>

很明显,元音符号没有正确导入,我该如何解决?

【问题讨论】:

  • 您使用的是什么版本的 R?我在我的 Mac 上使用 3.0.2,这工作正常
  • 我正在使用 RStudio 和 R 3.1.2(64 位 Windows)
  • 更新了我的答案。您应该能够将语言环境设置为 windows 默认为非 utf8

标签: xml r utf-8 import


【解决方案1】:

截至今天,这是对我有用的解决方案:

linkToXmlFile <- "<yourPath>"

library(XML)

data <- xmlParse(linkToXmlFile, encoding="UTF-8")
xmlDataFrame <- xmlToDataFrame(data)

我使用的是 Windows 10,并且 XML 存储在 UTF-8 文本文件中。

【讨论】:

    【解决方案2】:

    Windows 可能默认不使用 UTF-8,as mentioned in this article。那里有各种解决方案可以改为写入二进制文件。

    但是,您是否尝试过设置系统区域设置?

    Sys.setlocale(category="LC_ALL", locale="en_US.UTF-8")
    

    我设法通过将语言环境设置为 ISO8859-1 语言环境来“破解”它,例如“fi_FI.ISO8859-1”

    编辑

    我安装了 R 3.1.2 的 Windows 版本来复制这个,果然,它和你发布的一样。我尝试了以下方法,虽然 R 控制台上的输出看起来不正确,但文件的输出是正确的

    > Sys.setlocale(category="LC_ALL", locale="German")
    > [1] "LC_COLLATE=German_Germany.1252;LC_CTYPE=German_Germany.1252;LC_MONETARY=German_Germany.1252;LC_NUMERIC=C;LC_TIME=German_Germany.1252"
    > doc <- xmlParse("c:/Users/Mark/german.xml")
    > saveXML(doc, "c:/Users/Mark/german-2.xml")
    

    文件写成:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <verzeichnis><titel>Wikipedia Städteverzeichnis</titel><eintrag><stichwort>Genf</stichwort><eintragstext>Genf ist der Sitz von ä ü ö &amp;...</eintragstext></eintrag></verzeichnis>"
    

    所以看起来写得正确。

    【讨论】:

    • 不会工作,警告消息:在 Sys.setlocale(category = "LC_ALL", locale = "en_US.UTF-8") :操作系统报告将区域设置设置为 "en_US.UTF-8" 的请求不能兑现,与“de_DE.UTF-8”相同,Sys.getlocale() 给出:“LC_COLLATE=German_Germany.1252;LC_CTYPE=German_Germany.1252;LC_MONETARY=German_Germany.1252;LC_NUMERIC=C;LC_TIME=German_Germany.1252” , 编辑:它实际上看起来像 German_Germany.1252 和 de_DE.UTF-8 是一样的:docs.moodle.org/dev/Table_of_locales
    • 我的答案的另一个更新。安装windows版本并将系统区域设置为“德语”,并正确写入文件
    • mmh 这很奇怪,不过我可以重现这个,看起来它写入正确,但我仍然无法在 rstudio 中正确使用 xml 文件,例如 ö 被识别为“ö”并算作2 个字符...当我实际上需要 r 将其识别为“ö”和 1 个字符时。 (“ö” =="ö" 会给我 FALSE)
    • 好吧,我找到了一个解决方法,我获取我需要的字符串并执行 s
    • 很高兴我能帮上忙。多年前,由于编码问题,我将所有开发人员都移出了 Windows!
    猜你喜欢
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2016-08-14
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多