【发布时间】:2016-08-20 07:08:58
【问题描述】:
我正在尝试从https://www.magna.isa.gov.il/Details.aspx?l=he 保存使用RSelenium 提取的数据,但是尽管R 成功将希伯来字符打印到控制台,但在导出TXT、CSV 或其他简单的R 函数(如data.frame())时却没有、readHTMLTable()等
这里有一个例子。
> head(lines)
[1] "גלובל פיננס ג'י.אר. 2 בע\"מ נתונים כספיים באלפי דולר ארה\"ב"
[2] "513435404"
[3] ""
[4] ""
[5] ""
[6] "4,481"
使用data.frame()时第一行变为奇怪的字符(下)
> head(as.data.frame(lines))
[1] <U+05D2><U+05DC><U+05D5><U+05D1><U+05DC> <U+05E4><U+05D9><U+05E0><U+05E0><U+05E1> <U+05D2>'<U+05D9>.<U+05D0><U+05E8>. 2 <U+05D1><U+05E2>"<U+05DE> <U+05E0><U+05EA><U+05D5><U+05E0><U+05D9><U+05DD> <U+05DB><U+05E1><U+05E4><U+05D9><U+05D9><U+05DD> <U+05D1><U+05D0><U+05DC><U+05E4><U+05D9> <U+05D3><U+05D5><U+05DC><U+05E8> <U+05D0><U+05E8><U+05D4>"<U+05D1>
write.table 或 write.csv 导出 .TXT 或 .CSV 时也会发生同样的情况:
write.csv(lines,"lines.csv",row.names=FALSE)
我尝试将编码更改为“UTF-8”,就像在几个类似问题中建议的那样,但问题仍然是不同的格式:
iconv(lines, to = "UTF-8")
1 ׳’׳׳•׳‘׳ ׳₪׳™׳ ׳ ׳¡ ׳’'׳™.׳׳¨. 2 ׳‘׳¢"׳ ׳ ׳×׳•׳ ׳™׳ ׳›׳¡׳₪׳™׳™׳ ׳‘׳׳׳₪׳™ ׳“׳•׳׳¨ ׳׳¨׳”"׳‘
希伯来语 ISO-8859-8 也是如此:
iconv(lines, to = "ISO-8859-8")
1 ×'×o×.×'×o ×₪×T× × ×! ×''×T.×ר. 2 ×'×¢"×z × ×a×.× ×T× ×>×!×₪×T×T× ×'××o×₪×T ×"×.×oר ×ר×""×'
我不明白为什么控制台能很好地打印希伯来字符,而 write.table()、write.csv() 和 data.frame() 会出现编码问题。
有人帮我导出吗?
Ken 回答了,使用 writeLines() 导出文本效果很好:
f = file("lines.txt", open = "wt", encoding = "UTF-8")
writeLines(lines, "lines.txt", useBytes = TRUE)
close(f)
然而,主要问题R在处理表格时以as.data的形式使用希伯来语编码是 .frame()、write.table() 和 write.csv()。有什么想法吗?
一些机器信息:
Sys.info()
sysname release version
"Windows" "7 x64" "build 7601, Service Pack 1"
nodename machine login
"TALIS-TP" "x86"
> Sys.getlocale()
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"
【问题讨论】:
-
尝试使用 write.csv(lines,"lines.csv",enconding ="UTF-8')
-
这无疑与您的
readLines()语句中的编码有关。请包括输入文件的几行,以及您用来读取它的命令。您还想确保stringsAsFactors = FALSE在data.frame()命令中。 -
您确定您的输入文件编码为 UTF-8 吗? (而不是例如 Windows-1255)
-
嗨 Diego,我试过了,但我没有工作。
-
嗨,我正在从网上读取文件,使用 RSelenium 和命令 webElem = remDrv$findElements("class", "rGridNumberDir"),然后循环获取 getElementAttribute("outerHTML" )。