Roh*_*hit 5 regex windows r utf-8
我正在处理包含印地语文本的文件并解析它们。我在 Rstudio 中编写了我的代码并执行它没有很多问题。但是现在,我需要使用 R.exe/Rscript.exe 从命令行执行相同的脚本,但它的工作方式不同。我从 RStudio 和终端运行了一个简单的脚本:
n_p<-'???'
Encoding(n_p)
gregexpr(n_p,c('adfdafc','??? adsfdfa'))
sessionInfo()
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
我曾尝试更改语言环境,但Sys.setlocale拒绝正常工作。在某些情况下,gregexpr当它无法解析非 ASCII 代码时会出错。最后,当它运行没有错误时,它不能正确匹配正则表达式。我目前无法提供可重现的示例,但我稍后会尝试。
帮助。
正确的答案是您应该使用选项 --encoding=文件编码 运行 Rscript
无需设置区域设置,而且您可能发现,它无论如何都不起作用。如果您的文件是 UTF-8: Rscript.exe --encoding=UTF-8 file.R
您需要确保 R 在合适的语言环境中运行:
运行 rterm use:Sys.getlocale()来查找您当前的语言环境。
您可以使用以下方法设置您的区域设置:
Sys.setlocale(category = "LC_ALL", locale = "hi-IN")
# Try "hi-IN.UTF-8" too...
Run Code Online (Sandbox Code Playgroud)
如果您有正确的值,请将Sys.setlocale()命令放入您的~/.Rprofile.
参考
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |