相关疑难解决方法(0)

在R中处理非英文名称的文件

当使用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)我正确地看到了西里尔字母.

r utf-8 internationalization character-encoding cyrillic

7
推荐指数
1
解决办法
2407
查看次数

最佳实践:我应该尝试将UTF-8更改为区域设置还是保持原样安全?

我尝试将我的默认编码设置为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")但得到了 …

windows encoding r utf-8

6
推荐指数
1
解决办法
2741
查看次数

readr :: read_csv问题:汉字变成乱码

我正在尝试将数据集导入到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中没有编码选项,我该怎么做?

r dplyr readr tidyverse

3
推荐指数
1
解决办法
1185
查看次数

为什么PHP开发人员不能按照线程范围提供setlocale函数

我们 在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函数的警告?

php apache multithreading setlocale

2
推荐指数
1
解决办法
1779
查看次数