Windows下R语言的UTF-8支持

4
自从Windows 10加入了新功能“Beta: Use Unicode UTF-8 for worldwide language support”,我认为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?

(因为我对区域设置问题不太熟悉,如果需要更多信息,欢迎评论。)

信息

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

1
在Windows上支持R的Unicode是非常糟糕的。 - xwhitelight
您可以在选项>代码>保存中将UTF-8设置为默认编码。但是,如果您想发布R Markdown报告,则可能会出现各种问题。 - xwhitelight
在R Markdown代码块中使用Unicode字符时,必须使用\uXXXX。 - xwhitelight
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-on-windows/
看起来 R 已经构建出完全支持 Windows 10 上的 UTF-8 的实验二进制文件,但由于项目在2020年7月30日被标记为“实验性”,而且官方的结论是:

基于这种经验,我认为转换到 UCRT 已经是可行的,我预计构建一个完整的工具链只需要几个月。这是我认为在 Windows 上可靠地支持 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

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

请遵守上面代码片段的所有警告以及locales:查询或设置语言环境的方面文章中的其他注意事项:
  • 尝试在会话期间更改字符集(通过Sys.setlocale(“LC_CTYPE”,),如果这意味着不同的字符集)可能无法正常工作并可能导致一些混乱
  • “LC_NUMERIC”设置为除“C”之外的任何值可能导致R表现异常,因此会给出警告。
  • 自Windows以来,R本身使用的几乎所有输出例程忽略了“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"
> 

1
谢谢您的回答。我尝试更改locales的每个元素,但每次都会得到相同的拒绝。我注意到Windows的语言环境问题困扰着日本的高级R用户,所以对我来说,这个问题似乎已经无法控制了。再次感谢您。 - tragoat

0

到目前为止(2020 年 8 月 22 日),在 Windows 中使用 R 的最佳方式是安装 WSL 2(Windows Subsystem for Linux),然后通过 Web 浏览器连接到 RStudio Server。

说明:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接