有没有办法在 XML 文件中定位编码问题?我正在尝试使用in 中的库解析这样的文件(我们称之为doc
),但编码似乎存在问题。XML
R
xmlInternalTreeParse(doc, asText=TRUE)
Error: Document labelled UTF-16 but has UTF-8 content.
Error: Input is not proper UTF-8, indicate encoding!
Error: Premature end of data in tag ...
然后是带有可能过早结束数据的标签列表。但是,我很确定本文档中不存在过早的结束。
好的,接下来尝试:
doc <- iconv(doc, to="UTF-8")
doc <- sub("utf-16", "utf-8", doc)
xmlInternalTreeParse(doc, asText=T)
Error: Premature end of data in tag...
又是一个标签列表和行号。我检查了线路,我找不到任何错误。
另一个怀疑:文档中出现的“µ”字符可能会导致错误。所以接下来尝试:
doc <- iconv(doc, to="UTF-8")
doc <- gsub("µ", "micro", doc)
doc <- sub("utf-16", "utf-8", doc)
xmlInternalTreeParse(doc, asText=T)
Error: Premature end of data in tag...
还有其他调试建议吗?
编辑:花了两天时间尝试修复错误后,我仍然没有找到解决方案。但是,我想我已经缩小了可能的答案。这是我发现的:
将字符串从源数据库复制到文件中,并将其保存为Notepad++ --> 中
XML
的单独文件。xml
Document labelled UTF-16 but has UTF-8 content
在此文件中更改
<?xml version="1.0" encoding="utf-16"?>
为<?xml version="1.0" encoding="utf-8"?>
(或encoding="latin1"
)->没有错误XML
通过从数据库中读取字符串,使用ordoc <- sqlQuery(myconn, query.text, stringsAsFactors = FALSE); doc <- doc[1,1]
对其进行操作,然后尝试使用-->对其进行解析str_sub(doc, 35, 36) <- "8"
str_sub(doc, 31, 36) <- "latin1"
xmlInternalTreeParse(doc)
Premature end of data in tag...
如上所述从数据库中读取
XML
字符串,然后尝试使用xmlInternalTreeParse(doc)
-->解析它Document labelled UTF-16 but has UTF-8 content. Input is not proper UTF-8, indicate encoding ! Bytes: 0xE4 0x64 0x2E 0x20 Premature end of data in tag...
(标签列表如下)。XML
如上所述从数据库中读取字符串并使用xmlInternalTreeParse(doc, encoding="latin1")
-->进行解析Premature end of data in tag...
在解析之前使用
doc <- iconv(doc[1,1], to="UTF-8")
orto="latin1"
不会改变任何东西
我非常感谢任何建议。