2012-07-06 57 views
2

我正在尋找和摧毀任何東西,讓亞馬遜感到不快。在過去,我用iconv從「UTF-8」,以在「latin1」轉換處理,但我不能這樣做,在這裏,因爲它的編碼爲「未知」:如何匹配所有國際化文本?

test <- "Gwena\xeblle M" 
> gsub("\xeb","", df[306,"primauthfirstname"]) 
[1] "Gwenalle M" 
> Encoding(df[306,"primauthfirstname"]) 
[1] "unknown" 

那麼什麼正則表達式消除了所有\ x ##代碼?

+0

您是否碰巧知道如何輕鬆生成所有\ x ##代碼,並將它們輸出爲字符向量? (我需要它來測試一個可能的解決方案)。 – 2012-07-06 22:08:00

+0

@ JoshO'Brien不,但這裏有一些測試:'測試< - c(「\ x92」,「\ xe4」,「\ xe1」,「\ xeb」)' – 2012-07-06 22:09:36

+1

爲了記錄,這是一個非常簡單的方法來生成「\ x ##」形式的所有字符:'sapply(0:255,intToUtf8)'。 – 2012-07-06 22:48:03

回答

3

我相信這個模式應該工作:

pat <- "[\x80-\xFF]" 

test <- c("Gwena\xeblle M", "\x92","\xe4","\xe1","\xeb") 
gsub(pat, "", test, perl=TRUE) 
# [1] "Gwenalle M" ""   ""   ""   ""  

說明:

它的作品,因爲角色職業"[\x00-\xFF]"將匹配形式\x##的所有字符。但是,前一半 - 十六進制數中的第0位到第127位(或00th到7Fth) - 是the ASCII characters。所以這是他們的後半部分 - 十六進制模式中的第128到255位(或者80'到FF') - 您要搜索並摧毀。

+0

喬治,做到了! – 2012-07-06 22:24:45

+0

這不再適用於R的最新版本,至少在我的系統中:「PCRE模式編譯錯誤 \t」在字符類'「中的順序不合適。將嘗試調試並回報。 – 2014-03-22 15:26:51

+0

@ AriB.Friedman - FWIW,這仍然適用於我。我在Windows上使用R-3.0.3(2014-03-06),x86_64-w64-mingw32/x64(64位)。 – 2014-03-22 18:19:31

2

我循環通過iconvlist()了一下,發現這個(其他組合中):

test<-"Gwena\xeblle M" 
iconv(test,"CP1163","UTF-8") 
[1] "Gwenaëlle M" 

我意識到,這是不是你問什麼,但有可能找到正確的編碼。