带有utf-8文本的脚本与Windows中的RStudio和命令行运行方式不同

带有utf-8文本的脚本与Windows中的RStudio和命令行运行方式不同,r,regex,windows,utf-8,R,Regex,Windows,Utf 8,我正在处理包含印地语文本的文件并对其进行解析。我用Rstudio编写了我的代码,执行时没有出现很多问题。但是现在,我需要使用R.exe/Rscript.exe从命令行执行相同的脚本,但它的工作方式不同。我已经从RStudio和终端运行了一个简单的脚本: n_p<-'नाम' Encoding(n_p) gregexpr(n_p,c('adfdafc','नाम adsfdfa')) sessionInfo() n\u p n\u p >编码(n_p) [1] “UTF-8” > >

我正在处理包含印地语文本的文件并对其进行解析。我用Rstudio编写了我的代码,执行时没有出现很多问题。但是现在,我需要使用R.exe/Rscript.exe从命令行执行相同的脚本,但它的工作方式不同。我已经从RStudio和终端运行了一个简单的脚本:

n_p<-'नाम'

Encoding(n_p)

gregexpr(n_p,c('adfdafc','नाम adsfdfa'))
sessionInfo()
n\u p n\u p
>编码(n_p)
[1] “UTF-8”
> 
>gregexpr(n_p,c('adfdafc','नाम adsfa'))
[[1]]
[1] -1
属性(,“匹配长度”)
[1] -1
[[2]]
[1] 1
属性(,“匹配长度”)
[1] 3
>sessionInfo()
R版本3.5.0(2018-04-23)
平台:x86_64-w64-mingw32/x64(64位)
在以下环境下运行:Windows 7 x64(版本7600)
矩阵乘积:默认值
区域设置:
[1] LC_COLLATE=英语_India.1252 LC_CTYPE=英语_India.1252
[3] LC_货币=英语_印度1252 LC_数字=C
[5] LC_TIME=English_India.1252
附加基本包:
[1] 统计图形GRUTILS数据集方法库
其他随附包裹:
[1] rJava_0.9-10
通过命名空间加载(未附加):
[1] 编译器3.5.0工具3.5.0
cmd中带有R.exe的输出(用于调试目的。Rscript.exe如果输出不相同,则会给出类似的输出)

>n\u p
>编码(n_p)
[1] “拉丁语1”
>
>gregexpr(n_p,c('adfdafc','a☼"à☼_à☼r adsfa'))
[[1]]
[1] -1
属性(,“匹配长度”)
[1] -1
[[2]]
[1] 1
属性(,“匹配长度”)
[1] 9
>sessionInfo()
R版本3.5.0(2018-04-23)
平台:x86_64-w64-mingw32/x64(64位)
在以下环境下运行:Windows 7 x64(版本7600)
矩阵乘积:默认值
区域设置:
[1] LC_COLLATE=英语_India.1252 LC_CTYPE=英语_India.1252
[3] LC_货币=英语_印度1252 LC_数字=C
[5] LC_TIME=English_India.1252
附加基本包:
[1] 统计图形GRUTILS数据集方法库
通过命名空间加载(未附加):
[1] 编译器3.5.0
我尝试过更改区域设置,但
Sys.setlocale
拒绝正常工作。在某些情况下,
gregexpr
在无法解析非ASCII代码时会出错。最后,当它运行时没有错误,它与正则表达式不匹配。目前我无法提供可复制的示例,但稍后我会尝试


帮助。

您需要确保R在合适的语言环境中运行:

运行rterm使用:
Sys.getlocale()
查找当前区域设置

您可以使用以下命令设置您的区域设置:

Sys.setlocale(category = "LC_ALL", locale = "hi-IN")

# Try "hi-IN.UTF-8" too...
您可以找到区域设置名称、和

如果值正确,请将
Sys.setlocale()
命令放入
~/.Rprofile

参考资料


正确的答案是您应该使用选项--encoding=file encoding运行Rscript

不需要设置区域设置,而且正如您可能发现的那样,它无论如何都不起作用。如果您的文件是UTF-8:
Rscript.exe--encoding=UTF-8 file.R

您在这里的期望是什么?您的目标是什么?我了解您收到的两种不同的输出,但很抱歉,我无法理解您试图解决的问题(概述,例如为什么要使用regexpr?、您尝试匹配的字符串是什么?…等等).Thanksry
options(encoding=“UTF-8”)
在脚本开始时,尝试执行如下脚本:
eval(parse(filename,encoding=“UTF-8”)
在Windows中,它对
等字符有效,但对
等字符无效。
> n_p<-'à☼"à☼_à☼r'
>
> Encoding(n_p)
[1] "latin1"
>
> gregexpr(n_p,c('adfdafc','à☼"à☼_à☼r adsfdfa'))
[[1]]
[1] -1
attr(,"match.length")
[1] -1

[[2]]
[1] 1
attr(,"match.length")
[1] 9

> sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7600)

Matrix products: default

locale:
[1] LC_COLLATE=English_India.1252  LC_CTYPE=English_India.1252
[3] LC_MONETARY=English_India.1252 LC_NUMERIC=C
[5] LC_TIME=English_India.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] compiler_3.5.0
Sys.setlocale(category = "LC_ALL", locale = "hi-IN")

# Try "hi-IN.UTF-8" too...