gpt4 book ai didi

windows - 在 Windows 下使用任何语言环境的工作日

转载 作者:可可西里 更新时间:2023-11-01 12:43:16 26 4
gpt4 key购买 nike

我正在尝试获取星期几,并让它在任何语言环境中始终如一地工作。在使用拉丁字母的语言环境中,一切都很好。

Sys.getlocale()
## [1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"
weekdays(Sys.Date())
## [1] "Tuesday"

我有两个与其他语言环境相关的问题。

如果我设置

Sys.setlocale("LC_ALL", "Arabic_Qatar")
## [1] "LC_COLLATE=Arabic_Qatar.1256;LC_CTYPE=Arabic_Qatar.1256;LC_MONETARY=Arabic_Qatar.1256;LC_NUMERIC=C;LC_TIME=Arabic_Qatar.1256"

然后我有时(正确地)得到

weekdays(Sys.Date())
## [1] "الثلاثاء

有时得到

weekdays(Sys.Date())
## [1] "ÇáËáÇËÇÁ"

取决于我的设置。问题是,我无法弄清楚是什么导致了这种差异。

我认为这可能与 getOption("encoding") 有关,但我已经尝试显式设置 options(encoding = "native.enc")options(encoding = "UTF-8") 没有区别。

我尝试了几个最新版本的 R,这个问题在所有版本中都是一致的。

目前,该字符串在 R GUI 中正确显示,但在我使用 IDE 时显示不正确(经过 Architect 和 RStudio 测试)。

我应该如何设置才能确保工作日始终正确显示?

了解 weekdays(Sys.Date()) 等同于 format(as.POSIXlt(Sys.Date()), "%A"),它调用内部 format.POSIXlt 方法。

其次,更改所有语言环境似乎有些过分。我想我应该能够设置时间选项。但是,如果我设置语言环境的各个组成部分,weekdays 会返回一串问号。

for(category in c("LC_TIME", "LC_CTYPE", "LC_COLLATE", "LC_MONETARY"))
{
Sys.setlocale(category, "Arabic_Qatar")
print(Sys.getlocale())
print(weekdays(Sys.Date()))
}
## [1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=Arabic_Qatar.1256"
## [1] "????????"
## [1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=Arabic_Qatar.1256;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=Arabic_Qatar.1256"
## [1] "????????"
## [1] "LC_COLLATE=Arabic_Qatar.1256;LC_CTYPE=Arabic_Qatar.1256;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=Arabic_Qatar.1256"
## [1] "????????"
## [1] "LC_COLLATE=Arabic_Qatar.1256;LC_CTYPE=Arabic_Qatar.1256;LC_MONETARY=Arabic_Qatar.1256;LC_NUMERIC=C;LC_TIME=Arabic_Qatar.1256"
## [1] "????????"

语言环境的哪些部分会影响工作日的打印方式?


更新:问题似乎与 Windows 相关。当我在区域设置 "ar_QA.UTF8" 的 Linux 机器上运行代码时,工作日正确显示。


进一步更新:正如 agstudy 在他的回答中提到的,在 Windows 下设置区域设置很奇怪,因为您不能只使用像“en-GB”这样的 ISO 代码。对于 Windows 7/Vista/Server 2003/XP,您可以使用 setlocale language strings 设置语言环境或 National Language Support值。对于卡塔尔阿拉伯语,没有 setlocale 语言字符串,因此我们必须使用 NLS 值。我们有几种选择:

Sys.setlocale("LC_TIME", "ARQ")    # the language abbreviation name
Sys.setlocale("LC_TIME", "Arabic_Qatar") # corresponding to the language/country pair "Arabic (Qatar)"
Sys.setlocale("LC_TIME", "Arabic_Qatar.1256") # explicitly including the ANSI codepage
Sys.setlocale("LC_TIME", "Arabic") # would sometimes be a possibility too, but it defaults to Saudi Arabic

所以问题不在于 R 不能支持 Windows 下的阿拉伯语语言环境(尽管我并不完全相信 Sys.setlocale 的稳健性)。


孤注一掷的最后一搏:试图通过使用 Windows Management Instrumentation 命令更改操作系统区域设置来神奇地修复问题是行不通的,因为 R 似乎无法识别这些更改。

system("wmic os set locale=MS_4001") 
## Updating property(s) of '\\PC402729\ROOT\CIMV2:Win32_OperatingSystem=@'
## Property(s) update successful.
system("wmic os get locale") # same as before

最佳答案

命名语言环境的系统是特定于操作系统的。我建议您阅读 locales来自 R Installation and Administration manual 的完整解释。

在windows下:

列出了支持的语言列表MSDN Language Strings .令人惊讶的是那里没有阿拉伯语。 “语言字符串”列包含在 R 中设置语言环境的合法输入,甚至在列表中 contry /regions strings那里没有说阿拉伯语的国家。

当然你可以改变你的语言环境全局设置(面板设置 --> 区域 --> ..)但是这将改变它全局并且它不确定在没有编码问题的情况下获得正确的输出。

在 linux 下(在我的例子中是 ubuntu):

默认情况下通常不支持阿拉伯语,但可以使用 locale 轻松设置它。

 locale -a                     ## to list all already supported language
sudo locale-gen ar_QA.UTF-8 ## install it in case does not exist

现在在 RStudio 下:

 Sys.setlocale('LC_TIME','ar_QA.UTF-8')
[1] "ar_QA.UTF-8"

> format(Sys.Date(),'%A')
[1] "الثلاثاء

另请注意,在 R 控制台下打印不如在 R studio 中漂亮,因为它是从从左到右而不是从从右到左编写的。

关于windows - 在 Windows 下使用任何语言环境的工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26603564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com