在Windows中,有很多关于打开包含(UTF-8编码)中文字符的CSV文件的StackOverflow帖子。我发现的答案似乎都没有完全奏效。
如果我read.csv
encoding="UTF-8"
,则中文字符会显示为已编码(<U+XXXX>
,我手动验证的字符至少是正确的。但是,如果我询问数据框只从一行获取一行或特定单元格,那么它就可以正确打印。
有一篇帖子暗示这是因为字符串被列为因素。但是,设置stringsAsFactors=FALSE
无效。
其他帖子说必须正确设置区域设置。我的系统区域设置显然是English_United Kingdom.1252
; Windows代码页看起来非常友好!如果我尝试将其更改为en.UTF-8
,en_GB.UTF-8
或en_US.UTF-8
(或甚至UTF-8
或Unicode
)中的任何一项,我会收到错误消息,说明我的操作系统无法兑现请求。
如果我尝试Sys.setlocale(category="LC_ALL", locale="Chinese")
,则语言环境会更改(虽然是另一个Windows代码页;但仍然没有Unicode),但无法解析CSV文件。也就是说,如果我读取英语语言环境中的文件,然后切换到中文,则数据框将在控制台中正确打印出来。但是,这很麻烦,无论如何,View(myData)
现在显示mojibake而不是编码的Unicode代码点。
有没有办法让它全部运转?也就是说,正确的中文字符从数据框回显到控制台和 View
,而不必在读取数据时执行秘密握手?
我的直觉是问题是语言环境:它应该设置为UTF-8语言环境,然后一切都应该[可能]正常工作。但是,我不知道该怎么做......
答案 0 :(得分:0)
UTF表示法很好,这意味着你的角色是在属性中读取的。 R的问题在于打印到控制台,除非您复制和粘贴输出,否则这不应该是一个大问题。写出有点棘手:你想打开一个UTF-8文件连接,然后写入该文件。