13

iconvとについてすべて読んだ後でEncodingも、私はまだ混乱しています。

次のような文字列があるWeb ページのソースをスクレイピングしています'pretty\u003D\u003Ebig'(R コンソールに として表示されます'pretty\\\u003D\\\u003Ebig')。これを ASCII 文字列に変換したいのですが、これは'pretty=>big'.

もっと簡単に言えば、設定すると

x <- 'pretty\\u003D\\u003Ebig'

xyieldへの変換を実行するにはどうすればよいpretty=>bigですか?

助言がありますか?

4

7 に答える 7

8

stringiパッケージで:

> x <- 'pretty\\u003D\\u003Ebig'
> stringi::stri_unescape_unicode(x)
[1] "pretty=>big"
于 2017-01-29T17:47:15.430 に答える
4

Hong ooiの回答を受け入れましたが、考えずにはいられず、重いparse解決eval策です。また、指摘されたように、安全ではありませんが、私のアプリケーションでは、危険な見積もりを取得しないと確信できます.

そこで、私は代替の、やや残忍なアプローチを考案しました。

udecode <- function(string){
  uconv <- function(chars) intToUtf8(strtoi(chars, 16L))
  ufilter <- function(string) {
    if (substr(string, 1, 1)=="|") uconv(substr(string, 2, 5)) else string
  }
  string <- gsub("\\\\u([[:xdigit:]]{4})", ",|\\1,", string, perl=TRUE)
  strings <- unlist(strsplit(string, ","))
  string <- paste(sapply(strings, ufilter), collapse='')
  return(string)
}

単純化は歓迎します!

于 2013-07-21T11:46:27.170 に答える
2

の使用eval(parse)!

eval(parse(text=paste0("'", x, "'")))

もちろん、これには文字列内の引用符を手動でエスケープする必要があるなど、独自の問題があります。ただし、表示される可能性のある有効な Unicode シーケンスに対しては機能するはずです。

于 2013-07-20T21:12:14.743 に答える
1

同情します。私は過去に R と Unicode テキストに苦労してきましたが、常にうまくいくとは限りませんでした。データが入っている場合は、x最初に次のようなグローバル置換を試してください。

x <- gsub("\u003D", "=>", x)

私は時々次のような構造を使用します

lapply(x, utf8ToInt)

高いコード ポイントがどこにあるかを確認します。たとえば、150 を超えるものです。これは、改行しないスペースが原因で発生する問題を特定するのに役立ちます。たとえば、時々ポップアップするようです。

于 2013-07-20T12:14:28.030 に答える