首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R-包含unicode (波斯语)字符的源脚本文件

R-包含unicode (波斯语)字符的源脚本文件
EN

Stack Overflow用户
提问于 2018-08-09 02:29:43
回答 2查看 286关注 0票数 1

将下面的文本写入缓冲区,并将其另存为.r脚本:

代码语言:javascript
运行
复制
letters_fa <- c('الف','ب','پ','ت','ث','ج','چ','ح','خ','ر','ز','د')

然后尝试使用以下代码行来source()它:

代码语言:javascript
运行
复制
script <- "path/to/script.R"
file(script,
     encoding = "UTF-8") %>%
  readLines() # works fine

file(script,
     encoding = "UTF-8") %>%
  source() # works fine

source(script) # the Farsi letters in the environment are misrepresented

source(script,
       encoding = "UTF-8") # gives error

最后一行抛出错误。我尝试对其进行调试,但我认为source函数中存在以下代码行中的错误:

代码语言:javascript
运行
复制
...
loc <- utils::localeToCharset()[1L]
...

.Internal(parse(线路上出现错误。

代码语言:javascript
运行
复制
...
exprs <- if (!from_file) {
      if (length(lines)) 
        .Internal(parse(stdin(), n = -1, lines, "?", 
          srcfile, encoding))
      else expression()
    }
    else .Internal(parse(file, n = -1, NULL, "?", srcfile, 
      encoding))
...

确切的错误是:

代码语言:javascript
运行
复制
Error in source(script, encoding = "UTF-8") : 
  script.R:2:17: unexpected INCOMPLETE_STRING
1: #' @export
2: letters_fa <- c('
                   ^
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-24 06:15:47

此问题的解决方案是将OS区域设置更改为本机区域设置(例如,本例中为波斯语),或者使用R内置函数Sys.setlocale(locale="Persian")来更改R会话本机区域设置。

票数 1
EN

Stack Overflow用户

发布于 2018-08-09 02:48:39

在不指定编码的情况下使用source,然后使用Encoding修改矢量的编码

代码语言:javascript
运行
复制
source(script)
letters_fa
#  [1] "الÙ\u0081" "ب"     "Ù¾"     "ت"     "Ø«"    
#  [6] "ج"     "چ"     "ح"     "خ"     "ر"    
# [11] "ز"     "د"
Encoding(letters_fa) <- "UTF-8"
letters_fa
# [1] "الف" "ب"   "پ"   "ت"   "ث"   "ج"   "چ"   "ح"   "خ"   "ر"   "ز"   "د"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51753429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档