我正在处理包含印地语文本的文件并解析它们。我在Rstudio中编写了代码并执行它没有太多问题。但是现在,我需要使用R.exe / Rscript.exe从命令行执行相同的脚本,并且它的工作方式不同。我从RStudio和终端运行了一个简单的脚本:
n_p<-'नाम'
Encoding(n_p)
gregexpr(n_p,c('adfdafc','नाम adsfdfa'))
sessionInfo()
RStudio输出:
> n_p<-'नाम'
>
> Encoding(n_p)
[1] "UTF-8"
>
> gregexpr(n_p,c('adfdafc','नाम adsfdfa'))
[[1]]
[1] -1
attr(,"match.length")
[1] -1
[[2]]
[1] 1
attr(,"match.length")
[1] 3
> 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
other attached packages:
[1] rJava_0.9-10
loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0
使用cmd中的R.exe输出(用于调试目的.Rscript.exe提供类似但不相同的输出)
> 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
拒绝正常工作。在某些情况下,gregexpr
在无法解析非ASCII代码时会出错。最后,当它运行没有错误时,它不能正确匹配正则表达式。我目前无法提供可重复的示例,但我会稍后尝试。
帮助。
答案 0 :(得分:3)
正确的答案是您应该使用--encoding = file encoding选项运行Rscript
不需要设置区域设置,而且您可能已经发现,它仍然无法正常工作。如果您的文件是UTF-8: Rscript.exe --encoding = UTF-8文件。R
答案 1 :(得分:0)
您需要确保R在合适的区域设置中运行:
运行rterm使用:Sys.getlocale()
查找您当前的区域设置。
您可以使用以下方式设置语言区域:
Sys.setlocale(category = "LC_ALL", locale = "hi-IN")
# Try "hi-IN.UTF-8" too...
如果您的值正确,请将Sys.setlocale()
命令放入~/.Rprofile
。
<强>参考强>