4

由于在 Windows10 上添加了新功能“Beta:使用 Unicode UTF-8 支持全球语言”,我认为 R 可以将语言环境转换为 UTF-8。但是,当我尝试将系统语言环境更改为 UTF-8 时

Sys.setlocale(locale = "Japanese_Japan.65001") 

或者

Sys.setlocale(locale = "Japanese_Japan.UTF-8") 

我明白了

In Sys.setlocale("Japanese_Japan.65001") :
OS reports request to set locale to "Japanese_Japan.65001" cannot be honored

目前,Windows 是否允许 R 使用 UTF-8?

(因为我对locale问题不是很熟悉,如果有更多信息欢迎评论。)

信息

> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"
4

3 回答 3

4

更新:(即将推出的)R 4.2.0 应该在 Windows 上完全支持 UTF-8:https ://developer.r-project.org/Blog/public/2021/12/07/upcoming-changes-in-r-4.2 -在窗口/


似乎 R 已经在 Windows 10 上构建了完全支持 UTF-8 的实验性二进制文件,但是由于该项目在 2020-07-30 被标记为“实验性”,因此官方结论是:

同样基于这一经验,我相信切换到 UCRT 已经成为可能,我预计构建完整的工具链应该需要几个月的时间。这是我认为在 Windows 上的 R 中可靠地支持 Unicode 字符(不能以本机编码表示)的唯一现实方法。

这显然意味着在 Windows 上的 R 中完全支持 UTF-8 仍然是一个更遥远的未来的计划。

来源:https ://developer.r-project.org/Blog/public/2020/07/30/windows/utf-8-build-of-r-and-cran-packages/index.html

于 2020-08-17T09:00:29.400 回答
2

Sys.setlocale(locale = foo)默认为category = "LC_ALL"; 可以单独为 R 进程设置语言环境的各个方面,例如如下:

locales <- c("LC_COLLATE","LC_CTYPE","LC_MONETARY","LC_NUMERIC","LC_TIME");
for (x in locales) { Sys.setlocale(category = x, locale="Japanese_Japan.65001")}

请注意上述代码片段中的所有警告以及语言环境的进一步说明 :Query or Set Aspects of the Locale文章:

  • 在会话期间尝试更改字符集(通过Sys.setlocale("LC_CTYPE", ),如果这意味着不同的字符集)可能不起作用,并且可能会导致一些混乱
  • 设置"LC_NUMERIC"为除"C" 可能导致 R 功能异常之外的任何值,因此会发出警告。
  • 几乎所有 R 本身在 Windows 下使用的输出例程都忽略了设置,"LC_NUMERIC"因为它们使用了未国际化的 Trio 库。

例如,我的语言环境是捷克语,所以我尝试了以下代码片段(在循环上方逐项列出以按顺序查看结果和警告):

Sys.getlocale(category = "LC_ALL")
Sys.setlocale(category = "LC_COLLATE" , locale="Czech_Czechia.65001")
Sys.setlocale(category = "LC_CTYPE"   , locale="Czech_Czechia.65001")
Sys.setlocale(category = "LC_MONETARY", locale="Czech_Czechia.65001")
Sys.setlocale(category = "LC_NUMERIC" , locale="Czech_Czechia.65001")
Sys.setlocale(category = "LC_TIME"    , locale="Czech_Czechia.65001")
Sys.getlocale(category = "LC_ALL")

输出(粘贴到 RStudio 控制台):

> Sys.getlocale()
[1] "LC_COLLATE=Czech_Czechia.1250;LC_CTYPE=Czech_Czechia.1250;LC_MONETARY=Czech_Czechia.1250;LC_NUMERIC=C;LC_TIME=Czech_Czechia.1250"
> Sys.setlocale(category = "LC_COLLATE" , locale="Czech_Czechia.65001")
[1] "Czech_Czechia.65001"
> Sys.setlocale(category = "LC_CTYPE"   , locale="Czech_Czechia.65001")
[1] ""
Warning message:
In Sys.setlocale(category = "LC_CTYPE", locale = "Czech_Czechia.65001") :
  OS reports request to set locale to "Czech_Czechia.65001" cannot be honored
> Sys.setlocale(category = "LC_MONETARY", locale="Czech_Czechia.65001")
[1] "Czech_Czechia.65001"
> Sys.setlocale(category = "LC_NUMERIC" , locale="Czech_Czechia.65001")
[1] "Czech_Czechia.65001"
Warning message:
In Sys.setlocale(category = "LC_NUMERIC", locale = "Czech_Czechia.65001") :
  setting 'LC_NUMERIC' may cause R to function strangely
> Sys.setlocale(category = "LC_TIME"    , locale="Czech_Czechia.65001")
[1] "Czech_Czechia.65001"
> Sys.getlocale(category = "LC_ALL")
[1] "LC_COLLATE=Czech_Czechia.65001;LC_CTYPE=Czech_Czechia.1250;LC_MONETARY=Czech_Czechia.65001;LC_NUMERIC=Czech_Czechia.65001;LC_TIME=Czech_Czechia.65001"
> 
于 2020-07-04T18:36:11.517 回答
1

迄今为止(2020 年 8 月 22 日)在 Windows 中使用 R 的最佳方式是安装 WSL 2(适用于 Linux 的 Windows 子系统)并通过 Web 浏览器连接到 RStudio Server。

指示:

  • 安装 WSL 2: https ://docs.microsoft.com/en-us/windows/wsl/install-win10 (需要 Windows 10,更新到版本 1903 或更高版本)。如果您想要 WSL 2 的 GUI,这里是说明:https ://most-useful.com/ubuntu-20-04-desktop-gui-on-wsl-2-on-surface-pro-4/ (​​但它几乎吃掉了我的内存,而且像狗屎一样迟钝)
  • 安装 R 和 RStudio 服务器:https ://rstudio.com/products/rstudio/download-server/
  • 启动 RStudio 服务器:sudo rstudio-server start
  • 打开网络浏览器(我推荐 Chrome)并连接到 http://localhost:8787,访问您的 Linux 帐户,RStudio Server 将打开并顺利运行。我在全屏模式下使用它,甚至为默认情况下以全屏模式打开它的地址创建一个桌面快捷方式。
于 2020-08-21T23:19:29.557 回答