2

ファイルからjsonを読み取るためにRのRJSONIOを使用しています。json には、正しく読み取られない Unicode 文字が含まれています。

このコードは、json が文字列として渡されるときに機能します。これは、R パッケージの作成者が stackoverflow の質問で示したように、Rでエスケープされた Unicode 文字を正しく処理する方法、たとえば em ダッシュ (—)です。

ただし、json をファイルから読み取ると、正しい Unicode 表現が生成されません。以下に示すように:

fromJSON(content="~/MTS/temp")
$query
$query$categorymembers
$query$categorymembers[[1]]
$query$categorymembers[[1]]$ns
[1] 0
$query$categorymembers[[1]]$title
[1] "Banach\023Tarski paradox"

~/MTS/temp には以下が含まれます。

{"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}`
4

1 に答える 1

1

と呼ばれる代替パッケージはjsonlite、私のシステム (OS X) で期待どおりに動作しますが、RJSONIO が動作しないことを確認しました。これは、JSON スニペットを次のファイルに保存した後のものですutext.txt

file.show("utext.txt")
## {"query":{"categorymembers":[{"ns":0,"title":"Banach\u2013Tarski paradox"}]}}
jsonlite::fromJSON("~/temp/utext.txt")
## $query
## $query$categorymembers
##   ns                 title
## 1  0 Banach–Tarski paradox

もう少しプラットフォームに依存する別の解決策を次に示します。Unicode でエスケープされたファイルを読み取る前にエンコードします。(お使いのプラットフォームにこのユーティリティがあるかどうかはわかりませんが、Windows でもおそらく見つかるでしょう。)

私のシステム ロケール エンコーディングは UTF-8 (OS X 標準) であるため、コマンド ライン ユーティリティnative2asciiを実行すると、UTF-8 としてエンコードしてから R に読み込むことができ、ロケールは en_GB.UTF-8 に設定されます。

ターミナル/シェルから:

native2ascii -reverse ~/temp/utext.txt ~/temp/utextUTF8.txt

次にRで:

RJSONIO::fromJSON("~/temp/utextUTF8.txt")
## $query
## $query$categorymembers
## $query$categorymembers[[1]]
## $query$categorymembers[[1]]$ns
## [1] 0
## 
## $query$categorymembers[[1]]$title
## [1] "Banach–Tarski paradox"

ボイル\u00e0 問題が解決しました。

于 2015-06-01T21:00:31.743 に答える