我在Windows 7 64位上使用R 2.15.0.我想将unicode(CJK)文本输出到文件.
以下代码显示了发送到UTF-8文件连接上的Unicode字符如何不能正常工作(I):
rty <- file("test.txt",encoding="UTF-8")
write("?", file=rty)
close(rty)
rty <- file("test.txt",encoding="UTF-8")
scan(rty,what=character())
close(rty)
Run Code Online (Sandbox Code Playgroud)
如扫描输出所示:
Read 1 item
[1] "<U+5728>"
Run Code Online (Sandbox Code Playgroud)
该文件不是用UTF字符本身编写的,而是某种符合ANSI标准的回退.我可以让它第一次正常工作(即使用其中包含"在"的文本文件),或者我可以使用一些额外的魔法将输出转换为Unicode,并使用正确的字符替换代码字符串吗?
谢谢.
[更多信息:相同的代码在Cygwin,R 2.14.2中正常运行,而Win7上的2.14.2也被破坏.这是在我的某个地方吗?]
pet*_*ner 14
该问题是由于一些R-Windows特殊行为(使用默认的系统编码/或使用一些系统写功能,我不知道具体情况,但行为实际上是已知的)
要在Windows上编写文本UTF8编码,必须使用useBytes=TwriteLines或readLines等函数中的选项:
txt <- "?"
writeLines(txt, "test.txt", useBytes=T)
readLines("test.txt", encoding="UTF-8")
[1] "?"
Run Code Online (Sandbox Code Playgroud)
在这里找到一篇由Kevin Ushey写的非常好的文章:http://kevinushey.github.io/blog/2018/02/21/string-encoding-and-r/更详细的内容.
在文本文件中保存UTF-8字符串:
kLogFileName <- "parser.log"
log <- function(msg="") {
con <- file(kLogFileName, "a")
tryCatch({
cat(iconv(msg, to="UTF-8"), file=con, sep="\n")
},
finally = {
close(con)
})
}
Run Code Online (Sandbox Code Playgroud)
小智 6
对于稍后遇到此问题的任何人,请参阅stringi包(https://cran.r-project.org/web/packages/stringi/index.html)。它包括很多功能,能够在R.最稳定的,跨平台的UTF-8字符串支持有关此主题的stri_read_lines(),stri_read_raw()以及stri_write_lines()功能可以持续输入/输出UTF-8,甚至在Windows上。
| 归档时间: |
|
| 查看次数: |
12364 次 |
| 最近记录: |