带有utf-8文本的脚本与Windows中的RStudio和命令行运行方式不同
我正在处理包含印地语文本的文件并对其进行解析。我用Rstudio编写了我的代码,执行时没有出现很多问题。但是现在,我需要使用R.exe/Rscript.exe从命令行执行相同的脚本,但它的工作方式不同。我已经从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” > >
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
中
参考资料
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...