2011-01-27 48 views
0

我正在使用grep解析通過facebook Open Graph API獲取的朋友列表。我主要是能夠做我想做的用下面的命令,在bash發出:如何使用grep unescape non-usa,en,ASCII類型的字符?

grep -aiPo '"name":"(.*?)","id":"[[:digit:]]*"' friends?blahblah-access-token-stuff 

這將產生它看起來像一個列表:

"name":"John Day","id":"--id ommitted--" 
"name":"Andria Cast\u00f1eda","id":"--id ommitted--" // let me draw your attention here 
"name":"Jane Doe","id":"--id ommitted--" 

名字是上述變更爲保護隱私

如果您注意到,中間條目中有一個非轉義序列,對應於一個波形符號N.是否有一種簡單的方法可將這些字符送入java程序(我的主要目的),以便java知道\ u00 f1eda是unicode爲捲曲n說話嗎?

我會不喜歡解決這個問題,通過解析java中的字符串和手動unnescap unicode。我非常希望指示grep來處理這種情況,或者另一個GNU或開源工具,它可以廣泛用於bash。

在這一點上,我會把整個輸入作爲一個文件提供給一個java程序,而不必擔心OMG,這是一個Unicode轉義序列!!? Java自然會檢測unicode字符並將它們映射到相應的內部表示。

在此先感謝!

+0

「安德里亞演員\ u00f1eda」 是無論如何,Unicode會被轉義出來。所以它應該輸出正確的字符。我不確定問題是什麼? – Mikaveli 2011-01-27 16:29:53

+0

好的,如果我打電話給System.out.println('\ u00f1eda'),它將打印正確的Unicode字符。但是,我能夠做典型的字符串操作嗎?比如,把「Andria Cast \ u00f1eda」和「Bob Joel」比較一下? – 2011-01-27 16:40:25

回答

0

Java理解Unicode。您提供的Java Unicode轉義以下列方式:

String str = "\u00F6"; 

所以,如果你傳遞一個字符串,如"Andria Cast\u00f1eda"一個轉義序列,它應該正確,而不需要任何額外的處理處理。

這裏也是一個非常簡短,但很容易理解的介紹:

Unicode in Java

如果你還是不相信,試試這個類:

public class UnicodeExample { 

    public static void main(String[] args) { 

     String escaped = new String("\u00f1"); 
     String unescaped = new String("ñ"); 
     System.out.println(escaped);   
     System.out.println(unescaped); 

     if(escaped.equals(unescaped)){ 
      System.out.println("The strings are the same!"); 
     } 
     else { 
      System.out.println("The strings are different!"); 
     } 

    } 

} 
0

一個通用的解決方案是不可能的,因爲grep使用的按字節數據流不能編碼所有的unicode字符串。