R 不显示来自 json 源的特殊字符
R does not show special characters coming from json source
稍微介绍一下背景。
我从提供 public 运输数据的 API 中提取数据。它 returns json 格式的结果,我用库 'jsonlite'.
处理
resp <- GET(url = url)
resp_char <- rawToChar(resp$content)
parsed <- fromJSON(resp_char, flatten = T)
parsed.df <- do.call(what = "rbind", args = lapply(parsed[1], as.data.frame))
问题是,结果中没有特殊字符。
我正在 Windows Server 2012 机器上工作,我在 R 中的语言设置如下所示:
> Sys.getlocale()
[1] "LC_COLLATE=German_Germany.1252;LC_CTYPE=German_Germany.1252;LC_MONETARY=German_Germany.1252;LC_NUMERIC=C;LC_TIME=German_Germany.1252"
示例:
> df$direction
"U Alt-Mariendorf (Berlin)"
"U Alt-Tegel (Berlin)"
"U Alt-Mariendorf (Berlin)"
"U Alt-Tegel (Berlin)"
"Märkisches Viertel, Wilhelmsruher Damm"
第五个结果的预期结果是"Märkisches Viertel, Wilhelmsruher Damm"
之后我查看了实际的编码。
> Encoding(df$direction)
[1] "unknown" "unknown" "unknown" "unknown" "UTF-8"
我认为到目前为止这看起来不错,但是我看不到特殊字符。
我很感激关于这个主题的任何建议和想法。
此致
使用数据框
df<-data.frame(direction=c("U Alt-Mariendorf (Berlin)","U Alt-Tegel (Berlin)","U Alt-Mariendorf (Berlin)","U Alt-Tegel (Berlin)","Märkisches Viertel, Wilhelmsruher Damm"), stringsAsFactors = FALSE)
> df
direction
1 U Alt-Mariendorf (Berlin)
2 U Alt-Tegel (Berlin)
3 U Alt-Mariendorf (Berlin)
4 U Alt-Tegel (Berlin)
5 Märkisches Viertel, Wilhelmsruher Damm
现在,只需将整个 df$direction
列的编码更改为
Encoding(df$direction) <- "UTF-8"
这解决了问题
> df
direction
1 U Alt-Mariendorf (Berlin)
2 U Alt-Tegel (Berlin)
3 U Alt-Mariendorf (Berlin)
4 U Alt-Tegel (Berlin)
5 Märkisches Viertel, Wilhelmsruher Damm
所以我终于明白了。
感谢@parth,它让我找到了正确的答案。
我在 fromJSON 语句之前使用了 Encoding,这对我有用。
resp <- GET(url = url)
resp_char <- rawToChar(resp$content)
Encoding(resp_char) <- "UTF-8"
parsed <- fromJSON(resp_char, flatten = T)
parsed.df <- do.call(what = "rbind", args = lapply(parsed[1], as.data.frame))
稍微介绍一下背景。 我从提供 public 运输数据的 API 中提取数据。它 returns json 格式的结果,我用库 'jsonlite'.
处理 resp <- GET(url = url)
resp_char <- rawToChar(resp$content)
parsed <- fromJSON(resp_char, flatten = T)
parsed.df <- do.call(what = "rbind", args = lapply(parsed[1], as.data.frame))
问题是,结果中没有特殊字符。
我正在 Windows Server 2012 机器上工作,我在 R 中的语言设置如下所示:
> Sys.getlocale()
[1] "LC_COLLATE=German_Germany.1252;LC_CTYPE=German_Germany.1252;LC_MONETARY=German_Germany.1252;LC_NUMERIC=C;LC_TIME=German_Germany.1252"
示例:
> df$direction
"U Alt-Mariendorf (Berlin)"
"U Alt-Tegel (Berlin)"
"U Alt-Mariendorf (Berlin)"
"U Alt-Tegel (Berlin)"
"Märkisches Viertel, Wilhelmsruher Damm"
第五个结果的预期结果是"Märkisches Viertel, Wilhelmsruher Damm"
之后我查看了实际的编码。
> Encoding(df$direction)
[1] "unknown" "unknown" "unknown" "unknown" "UTF-8"
我认为到目前为止这看起来不错,但是我看不到特殊字符。
我很感激关于这个主题的任何建议和想法。
此致
使用数据框
df<-data.frame(direction=c("U Alt-Mariendorf (Berlin)","U Alt-Tegel (Berlin)","U Alt-Mariendorf (Berlin)","U Alt-Tegel (Berlin)","Märkisches Viertel, Wilhelmsruher Damm"), stringsAsFactors = FALSE)
> df
direction
1 U Alt-Mariendorf (Berlin)
2 U Alt-Tegel (Berlin)
3 U Alt-Mariendorf (Berlin)
4 U Alt-Tegel (Berlin)
5 Märkisches Viertel, Wilhelmsruher Damm
现在,只需将整个 df$direction
列的编码更改为
Encoding(df$direction) <- "UTF-8"
这解决了问题
> df
direction
1 U Alt-Mariendorf (Berlin)
2 U Alt-Tegel (Berlin)
3 U Alt-Mariendorf (Berlin)
4 U Alt-Tegel (Berlin)
5 Märkisches Viertel, Wilhelmsruher Damm
所以我终于明白了。 感谢@parth,它让我找到了正确的答案。 我在 fromJSON 语句之前使用了 Encoding,这对我有用。
resp <- GET(url = url)
resp_char <- rawToChar(resp$content)
Encoding(resp_char) <- "UTF-8"
parsed <- fromJSON(resp_char, flatten = T)
parsed.df <- do.call(what = "rbind", args = lapply(parsed[1], as.data.frame))