当使用R函数来操作Windows中的文件时,例如dir(),那些具有非英语字符的文件(如西里尔文)将显示为"?"序列.
同样,在使用时file.rename(),如果新名称包含非英文字符,则使用不可读的字符重命名该文件,显然映射到不同的编码.
有许多函数处理文件内容的编码,但我们如何处理文件名?
重现问题:
外部R在工作目录中创建文件"привет.txt"; 然后在R:
dir()
# [1] "??????.txt"
# ...
Run Code Online (Sandbox Code Playgroud)
请注意设置:
Sys.setlocale(category = "LC_ALL", locale="Russian")
Run Code Online (Sandbox Code Playgroud)
没有帮助.
注意:我正在使用R 3.1.2 for Windows,在Windows 8.1下使用英语和Windows控制台(cmd.exe)我正确地看到了西里尔字母.
我尝试将我的默认编码设置为UTF-8; 到目前为止没有成功:
a <- "Hallo"
b <- "äöfd"
print(Encoding(a))
# [1] "unknown"
print(Encoding(b))
# [1] "latin1"
options(encoding = "UTF-8")
a <- "Hallo"
b <- "äöfd"
print(Encoding(a))
# [1] "unknown"
print(Encoding(b))
# [1] "latin1"
old_locale <- Sys.getlocale()
Sys.setlocale(category = "LC_ALL", locale = "English_United States.1252")
a <- "Hallo"
b <- "äöfd"
print(Encoding(a))
# [1] "unknown"
print(Encoding(b))
# [1] "latin1"
Sys.getlocale()
# [1] "LC_COLLATE=German_Switzerland.1252;
# LC_CTYPE=German_Switzerland.1252;
# LC_MONETARY=German_Switzerland.1252;
# LC_NUMERIC=C;LC_TIME=German_Switzerland.1252"
Run Code Online (Sandbox Code Playgroud)
我发现以下链接R编码文件和如何使用Sys.setlocale(),但你可以看到它似乎他们不适用于我的情况,我不明白为什么.
我也试过Sys.setlocale(category = "LC_ALL", locale = "en_US.UTF-8")但得到了 …
我正在尝试将数据集导入到RStudio,但是我遇到了汉字,因为它们变成了乱码.这是代码:
library(tidyverse)
df <- read_csv("??,??\n??,??")
df
# A tibble: 1 x 2
`\xd6\xd0\xce\xc4` `?\xce\xc4`
<chr> <chr>
1 "<U+04E2>\xce\xc4" "<U+00B5>\xc2\xce\xc4"
Run Code Online (Sandbox Code Playgroud)
当我使用基函数read.csv时,它运行良好.我想我必须对编码做错事.但是read_csv中没有编码选项,我该怎么做?
我们 在PHP中有setlocale函数.此功能有警告消息
每个进程维护语言环境信息,而不是每个线程.如果您在Windows上运行多线程服务器API(如IIS或Apache)上的PHP,则在脚本运行时可能会遇到区域设置的突然更改,尽管脚本本身从未调用过setlocale().这是因为其他脚本同时在同一进程的不同线程中运行,使用setlocale()更改进程范围的语言环境.
例如,带有miltithread设置的windows的apache.我在PHP项目中找到了这些代码行:
# ifdef PHP_WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
# endif
Run Code Online (Sandbox Code Playgroud)
如果这段代码有效,为什么我们必须关心setlocale函数的警告?