2016-12-28 193 views
2

我有一個字符串向量,其中一些值是用越南語編碼的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]))' –

回答

3

我複製的問題在於字符串( 「全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」)。如果你使用過,你是否在你的函數中設置了編碼? –