R、Windows 和外语字符

标签 r windows utf-8 character-encoding

这是 R 的一个长期存在的问题:它可以在 Unix 上读取非拉丁字符,但我无法在 Windows 上读取它们。多年来我在几台英文版 Windows 机器上复制了这个程序。我尝试过更改 Windows 中的本地化设置和许多其他设置,但没有效果。有人真的能够在 Windows 上读取外文文本文件吗?我认为能够读取/写入/显示 unicode 对于程序来说是一个非常漂亮的功能。

环境:

 > 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" 

The problem can be reproduced as follows:

Create simple file in a language like Russian or Arabic in a text editor and save it as UTF-8 w/o BOM.

> test_df <- read.table("test2.txt",header=FALSE, sep=";", quote="",fill=FALSE, 
encoding="UTF-8",comment.char="",dec=",")
......Warning message:
......In read.table("test2.txt", header = FALSE, sep = ";", quote = "",  :
......incomplete final line found by readTableHeader on 'test2.txt'
> test_df
......                    V1 V2
......1 <U+043E><U+0439>!yes  9

使用read.csv()会产生相同的结果,但减去警告。我意识到“”既可以搜索,也可以通过外部程序转换为可读字符。但我想在图表、表格、输出等中看到实际的西里尔文字,就像我在我使用过的所有其他程序中一样。

所以我几年来一直遇到这个问题。然后昨天的一天早上,我尝试了以下操作:

test_df <- read.table("items.txt",header=FALSE, sep=";",quote="",fill=FALSE,
encoding="bytes",comment.char="",dec=",")

并且encoding="bytes"有效!我在控制台中看到了西里尔字母。然后我不得不重新安装 R(相同的版本,相同的计算机,相同的一切),解决方案消失了。我确实回顾了所有的步骤,这看起来就像魔法一样。现在 encoding="bytes" 只会产生与 encoding="pizza" 相同的垃圾 (РєРѕРЅСЊСЏРє)(参数被忽略)。

read.table 还有一个 fileEncoding 参数。我不知道它是怎么做的,但它也不起作用,甚至无法阅读英文文本。

您可以在 Windows PC 上读取非 ASCII 文本文件吗?你到底是怎么做到的?

最佳答案

尝试设置区域设置。例如,

Sys.setlocale(locale = "Russian")

请参阅 ?Sys.setlocale 了解更多信息。

关于R、Windows 和外语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33883030/

相关文章:

python - 如何访问在我的 Windows 操作系统上的 Docker 工具箱 Linux 容器中创建的项目目录?

python - Utf-8 与 sqlalchemy 在具有 init connect 的数据库上

r - 如何更新 data.table 中动态选择的列

r - 计算一行的某些单元格中有多少个值不是 NA(在 R 中)

java - 如何使用 jpackage (Java 19) 创建启动器作为 Windows 服务

c++ - 使用ICU将UTF-8转换为UCS2导致乱码

mysql - UTF-8字符有问题;我看到的不是我存储的

r - 在每行中查找最小正值(不包括 0)

r - 如何使用ggplot通过一条线连接不同组的点

c++ - C++串口问题