相关疑难解决方法(0)

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

我想要获得一周中的某一天,并让它在任何地方都能保持一致.在使用拉丁字母的语言环境中,一切都很好.

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"
Run Code Online (Sandbox Code Playgroud)

我和其他语言环境有两个相关的问题.

如果我订

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"
Run Code Online (Sandbox Code Playgroud)

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

weekdays(Sys.Date())
## [1] "????????
Run Code Online (Sandbox Code Playgroud)

有时会得到

weekdays(Sys.Date())
## [1] "ÇáËáÇËÇÁ"
Run Code Online (Sandbox Code Playgroud)

取决于我的设置.问题是,我无法弄清楚造成这种差异的原因.

我认为这可能与某些事情有关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] …
Run Code Online (Sandbox Code Playgroud)

windows locale r character-encoding

9
推荐指数
2
解决办法
633
查看次数

Windows中的语言环境列表

在*nix系统上,您可以locale -a获取可用语言环境列表.

Windows中的等效命令(或操作)是什么?

我在Internet上看过列表,但大多数都是区域设置标签,而不是实际的区域设置名称.此外,并非所有系统都保证安装所有系统,对吧?

请注意,我在这里对"locale"的定义是"locale string",即C的第二个参数setlocale(),它将导致非NULL返回值.

程序化答案也很好,我只是厌倦了蛮力猜测Windows语言环境名称.

c windows locale localization setlocale

4
推荐指数
1
解决办法
5657
查看次数

标签 统计

locale ×2

windows ×2

c ×1

character-encoding ×1

localization ×1

r ×1

setlocale ×1