【问题标题】:String values that can not be recognized by RR 无法识别的字符串值
【发布时间】:2017-05-13 03:48:02
【问题描述】:

我有一个字符串向量,其中一些值是越南语,用 UTF-8 编码编写。

> so_wrong
 [1] "Thiết bị & dịch vụ"     "Quản lý"               
 [3] "Hãng"                   "Thời tiết"             
 [5] "Lý do khác"             "Tàu bay về muộn"       
 [7] "Kỹ thuật"               "Thương mại"            
 [9] "Khai thác"              "Quản lý, điều hành bay"
[11] " "                     

我想删除另一个包含最后两个值的向量:“Quản lý, điều hành bay”和“”。但 R 无法识别它们。

> any(so_wrong == " ")
[1] FALSE
> any(so_wrong == "Quản lý, điều hành bay")
[1] FALSE

...即使在这些命令中输入的值也正是向量中的值(我将它们复制粘贴进去)。另一方面,这项工作:

> any(so_wrong == so_wrong[11])
[1] TRUE

问题是什么以及如何解决/解决它?

编辑:编码

> Encoding(so_wrong)
 [1] "UTF-8"  "UTF-8"  "latin1" "UTF-8"  "UTF-8"  "UTF-8"  "UTF-8" 
 [8] "UTF-8"  "latin1" "UTF-8"  "UTF-8" 

编辑:我将矢量保存到 csv 并将其推送到 here

【问题讨论】:

  • 使用 charToRaw 检查原始字节。最后一个向量中可能有多个空格,而第 10 个向量周围的多余空格可能不会显示。也可以使用 trimws 去除空格
  • 在 " " 值上使用 chartoRaw 给我结果 c2 a0 。我应该从中学到什么?
  • 您还可以使用从 R 到八进制转储的系统调用使用此命令查看对象中是否有任何非 ascii 字符:system(sprintf("echo %s | od -c", so_wrong[11]))

标签: r


【解决方案1】:

我将那个有问题的字符串(“Quản lý, điều hành bay”)复制到 R,分配给一个对象,检查逻辑相等,结果没问题。

> so_wrong <- "Quản lý, điều hành bay"
> so_wrong == "Quản lý, điều hành bay"
[1] TRUE

我认为问题在于您的编码选项。你可以尝试两件事:

  • 将编码选项显式设置为 utf-8:

    选项(encoding="utf-8")

顺便说一下,我的编码选项是“native.enc”

> getOption("encoding")
[1] "native.enc"

你也可以试试看。

  • 如果从文件中读取,您可以设置输入的编码。来自 read.table 的手册页:

read.table(file, header = FALSE, sep = "", quote = "\"'", dec = ".", numerics = c("allow.loss", "warn.loss", "no.loss"), row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, 跳过 = 0,check.names = TRUE,填充 = !blank.lines.skip, strip.white = FALSE,blank.lines.skip = TRUE, 评论.char = "#", allowEscapes = FALSE,flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

因此您可以在 read.table 中将编码显式设置为“utf-8”。

【讨论】:

  • 我已经更改了 UTF-8 和 native.enc 之间的编码(我认为这是 R 中的默认编码?)但结果仍然相同。我从一个 docx 文件中读取了这个,我写了一个函数,基于这个 link 但我不认为我的函数是问题,因为它与值本身无关。
  • 能否请您执行其中 x 是包含字符串的对象的 Encoding(x) 函数?输出是什么?顺便检查一下xml2包的编码选项。
  • 来自 read_xml 的手册页:read_xml(x, encoding = "", ..., as_html = FALSE, options = "NOBLANKS")。如果你使用了,你是否在你的函数中设置了编码?
  • 我已经用您的评论和我的文件中的 csv 编辑了问题。
  • getOption("encoding")的输出是什么
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2013-02-17
  • 2018-05-10
  • 2019-02-18
  • 1970-01-01
  • 2020-05-09
相关资源
最近更新 更多