XML ファイル内のエンコーディングの問題を特定する方法はありますか? そのようなファイル ( と呼びましょう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...
また、タグのリストが行番号とともに続きます。行を確認しましたが、エラーは見つかりません。
もう 1 つの疑惑: ドキュメント内に出現する "µ" 文字がエラーの原因である可能性があります。次に試してみてください:
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...
デバッグに関するその他の提案はありますか?
編集:エラーの修正に 2 日間費やしましたが、まだ解決策が見つかりません。しかし、考えられる答えを絞り込んだと思います。これが私が見つけたものです:
XML
ソース データベースから文字列をファイルにコピーし、それを別のxml
ファイルとして Notepad++ に保存します -->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
経由でデータベースから文字列を読み取り、またはdoc <- 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")
解析前にorを使用してto="latin1"
も何も変わりません
提案をいただければ幸いです。