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

标签 r regex windows utf-8

我正在处理包含印地语文本的文件并解析它们。我在 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 代码时会出错。最后,当它运行没有错误时,它不能正确匹配正则表达式。我目前无法提供可重现的示例,但我稍后会尝试。

帮助。

最佳答案

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

无需设置语言环境,而且您可能已经发现,它无论如何都不起作用。如果您的文件是 UTF-8:
Rscript.exe --encoding=UTF-8 文件.R

关于r - 带有 utf-8 文本的脚本与 Windows 中的 RStudio 和命令行的运行方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50761765/

相关文章:

.net - WCF wsHttpBinding 的 Windows 身份验证有多安全?

r - 将文本文件中的谷歌评论转换为 rmarkdown 脚注

python - 正则表达式字符匹配计数器

list - 基于逻辑条件的列表中的子集元素

javascript - 一组字符串不应位于第一个看到的左侧;

python - 如何保留句子中的特定字符

windows - SQL 加载程序 : writing batch file (windows) for processing multiple data file

windows - 添加客户端证书后,在使用 Python 和 Postman 的 Windows 上为 "unable to get local issuer certificate"

r - 如何根据特定或相似的字符串对数据框进行子集化

r - 用 ID 列展平数据框中的列表列