簡體   English   中英

UTF-8 支持 Windows 上的 R

[英]UTF-8 support in R on Windows

Since new function 'Beta: Use Unicode UTF-8 for worldwide language support' is added on Windows10, I thought it is possible for R to convert locale environment to 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"

似乎 R 已經在 Windows 10 上構建了完全支持 UTF-8 的實驗性二進制文件,但由於該項目被標記為“實驗性”,並且截至 202 年 2 月 3 日官方結論是:

同樣基於此經驗,我相信切換到 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

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文章:

  • 在 session 期間嘗試更改字符集(通過Sys.setlocale("LC_CTYPE", ) ,如果這意味着不同的字符集)可能不起作用,並且可能會導致一些混亂
  • "LC_NUMERIC"設置為"C"以外的任何值可能會導致 R 到 function 異常,因此會發出警告。
  • WindowsR 本身使用的幾乎所有 output 例程都忽略了"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")

Output (粘貼到 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"
> 

The best way to use R in Windows to this day (August 22nd, 2020) is to install WSL 2 (Windows Subsystem for Linux) and connect to RStudio Server via a web browser.

指示:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM