无法识别的字符串值R

问题描述:

我有一个字符串向量,其中一些值是用越南语编码的UTF-8编码。无法识别的字符串值R

> 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] " "      

我想删除它包含了最后两个值的另一种载体:“泉LY,điều禅师湾”和“”。但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

+0

使用charToRaw检查原始字节。最后一个向量中可能有多个空格,第10个向量周围的extraspaces可能不会显示出来。也可以使用trimws去除空格 – infominer

+0

对“”值使用chartoRaw给出结果c2 a0。我应该从中学到什么? –

+0

使用系统调用从R到八进制转储,您还可以看到使用此命令在对象中是否存在任何非ascii字符:'system(sprintf(“echo%s | od -c”,so_wrong [11]))' –

我复制的问题在于字符串( “全LY,điều禅师托架”),以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明确:

    选项(编码= “UTF-8”)

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

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

您也可以尝试一下。

  • 如果您从文件读取,您可以设置输入的编码。从函数read.table的手册页: “”

函数read.table(文件,标题= FALSE,九月= “”,帖= “\”'“, DEC =,数字= C (“allow.loss”,“warn.loss”,“no.loss”), row.names,col.names,as.is =!stringsAsFactors, na.strings =“NA”,colClasses = NA,nrows = -1, skip = 0,check.names = TRUE,fill =!blank.lines.skip, strip.white = FALSE,blank.lines.skip = TRUE, comment.char =“#”, allowEscapes = FALSE,flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = “”,编码= “未知”,文本,skipNul = FALSE)

所以,你可以明确地设置编码为 “函数read.table中的UTF-8”。

+0

我已经改变了UTF-8和native.enc之间的编码(我认为它是R中的默认编码),但结果仍然相同。我从一个docx文件中读取了这个数据,并且根据这个[link](https://rud.is/b/2015/08/23/using-r-to-get-data-out- of-word-docs /)但我认为我的功能不是问题,因为它与这些值本身无关。 –

+0

你能否执行Encoding(x)函数,其中x是包含字符串的对象?什么是输出?顺便说一下,我正在检查xml2包的编码选项。 –

+0

从read_xml的手册页:read_xml(x,encoding =“”,...,as_html = FALSE,options =“NOBLANKS”)。如果你使用过,你是否在你的函数中设置了编码? –