我想了解这是否是RStudio中的错误,还是我错过了一些东西。

我正在将csv文件读入R。在RStudio中将其打印到控制台中时,我会感到杂乱(除非我查看特定的向量)。在Rgui中这很好。

我将运行的代码是这样的:

Sys.setlocale("LC_ALL", "Hebrew")
x <- read.csv("https://raw.githubusercontent.com/talgalili/temp2/gh-pages/Hebrew_UTF8.txt", encoding="UTF-8")
x # shows gibrish
x[,2]
colnames(x)


这是RStudio的输出(不规则)

> x <- read.csv("https://raw.githubusercontent.com/talgalili/temp2/gh-pages/Hebrew_UTF8.txt", encoding="UTF-8")
> x
   âéì..áùðéí. îéâãø
1         23.0   æëø
2         24.0  ð÷áä
3         23.0  ð÷áä
4         24.0  ð÷áä
5         25.0   æëø
6         18.0   æëø
7         26.0   æëø
8         21.5  ð÷áä
9         24.0   æëø
10        26.0   æëø
11        24.0   æëø
12        19.0  ð÷áä
13        19.0  ð÷áä
14        24.5   æëø
15        21.0  ð÷áä
> x[,2]
 [1] זכר  נקבה נקבה נקבה זכר  זכר  זכר  נקבה זכר  זכר  זכר  נקבה נקבה זכר  נקבה
Levels: זכר נקבה
> colnames(x)
[1] "âéì..áùðéí." "îéâãø"
>


这是在Rgui中(很好):

>     x <- read.csv("https://raw.githubusercontent.com/talgalili/temp2/gh-pages/Hebrew_UTF8.txt", encoding="UTF-8")
>     x # shows gibrish
   גיל..בשנים. מיגדר
1         23.0   זכר
2         24.0  נקבה
3         23.0  נקבה
4         24.0  נקבה
5         25.0   זכר
6         18.0   זכר
7         26.0   זכר
8         21.5  נקבה
9         24.0   זכר
10        26.0   זכר
11        24.0   זכר
12        19.0  נקבה
13        19.0  נקבה
14        24.5   זכר
15        21.0  נקבה
>     x[,2]
 [1] זכר  נקבה נקבה נקבה זכר  זכר  זכר  נקבה זכר  זכר  זכר  נקבה נקבה זכר  נקבה
Levels: זכר נקבה
>     colnames(x)
[1] "גיל..בשנים." "מיגדר"
>


在这两个会话中,我的sessionInfo()是:

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=Hebrew_Israel.1255  LC_CTYPE=Hebrew_Israel.1255
[3] LC_MONETARY=Hebrew_Israel.1255 LC_NUMERIC=C
[5] LC_TIME=Hebrew_Israel.1255

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base

other attached packages:
[1] installr_0.17.0


我正在使用最新的RStudio版本0.99.892

谢谢。

最佳答案

这是R-studio中的错误,而不是唯一的。我已经看到you have received关于R-studio当前在Windows上具有非英语语言环境支持的问题的一般答案。据我所知,这不是第一次/版本有类似的问题。您可能还会遇到一些我认为与获胜10相关的new problems。请注意,由于我也遇到第二种类型的问题,因此我使用英语语言环境来打印希伯来语。

因此,我已尝试对您的问题进行一些调试,并提供了一些解决方法,以及有关问题出在哪里的一些新见解(我认为..)。我认为可以编写一个完整的函数来对其进行调试,该函数将对其进行修复,但是由于时间(和小时)的限制,我决定在此处停止。

我创建了以下数据:

x <- data.frame("x"= c("דור","dor"))


如前所述,使用希伯来语语言环境我也会变得杂乱无章

Sys.setlocale("LC_ALL", "Hebrew")
[1] "LC_COLLATE=Hebrew_Israel.1255;LC_CTYPE=Hebrew_Israel.1255;LC_MONETARY=Hebrew_Israel.1255;LC_NUMERIC=C;LC_TIME=Hebrew_Israel.1255"

"דור"
[1] "ãåø"

x
   x
1 ãåø
2 dor


使用英语语言环境,我得到此输出。

Sys.setlocale("LC_ALL", "English")
[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"

 "דור"
[1] "דור"

x
                         x
1 <U+05D3><U+05D5><U+05E8>
2                      dor


请注意,非data.frame输出可正常打印。它也出现在data.table类中,并且在listmatrix下可以正常打印。

同时检查print.data.frameprint.table方法可发现主要的可疑对象:format

进一步的调查证实了这些怀疑:

as.matrix(x)
     x
[1,] "דור"
[2,] "dor"

format(as.matrix(x))
     x
[1,] "<U+05D3><U+05D5><U+05E8>"
[2,] "dor                     "


因此,我建议您遵循以下工作流程:

Sys.setlocale("LC_ALL", "Hebrew")
x <- read.csv("https://raw.githubusercontent.com/talgalili/temp2/gh-pages/Hebrew_UTF8.txt", encoding="UTF-8")
as.matrix(x)
      âéì..áùðéí. îéâãø
 [1,] "23.0"      "זכר"
 [2,] "24.0"      "נקבה"
 [3,] "23.0"      "נקבה"
 [4,] "24.0"      "נקבה"
 [5,] "25.0"      "זכר"
 [6,] "18.0"      "זכר"
 [7,] "26.0"      "זכר"
 [8,] "21.5"      "נקבה"
 [9,] "24.0"      "זכר"
[10,] "26.0"      "זכר"
[11,] "24.0"      "זכר"
[12,] "19.0"      "נקבה"
[13,] "19.0"      "נקבה"
[14,] "24.5"      "זכר"
[15,] "21.0"      "נקבה"


两种语言环境:希伯来语和英语都可以在我的计算机上使用,但是col.names都不适用。

总而言之,这远非一个完整的解决方案,而只是解决打印(或召回格式化)问题的一个小而局部的解决方案。它还为R-studio中的希伯来语/非英语版本提供了更多信息,可以写一些更好的解决方案。 on this SO thread可以看到一个解决类似问题的示例,该示例在Windows中编写希伯来语。

关于r - 读取UTF-8文本文件(希伯来语)在RStudio控制台中显示乱码,在RGUI中显示文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35973507/

10-12 18:05