2011-01-27 1 views
0

私はfacebook Open Graph APIで得られたフレンドリストを解析するためにgrepを使用しています。私はbashで発行され、次のコマンドを使用して、私がやりたいことがほとんどできています:grepを使用してnon-usa、en、ASCII文字をエスケープする方法は?

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

名前はプライバシーに

を維持するために上記変更された:のように見えるのリストを生成する

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

真ん中のエントリには、ティルダNに対応するエスケープされていないシーケンスがあります。javaプログラムにそのような文字を簡単に入力することは可能ですか(主な目的) f1edaはカーリーnのためにユニコードを話していますか?

は、Javaで文字列を解析してユニコードをアンエスケープすることで、この問題を解決することをお勧めします。私はこの状況に対処するようにgrepに指示するか、あるいはbashで広く利用できるGNUやオープンソースのツールを好むでしょう。

その時点で、私はOMGを心配することなくJavaプログラムにファイルとして入力全体を送りますが、それはユニコードのエスケープシーケンスです! Javaは自然にUnicode文字を検出し、対応する内部表現にマップします。

ありがとうございます!

+0

"アンドリアキャストの\ u00f1eda":あなたはまだ納得していない場合は、このクラスを試してみてください

Unicode in Java

:ここ

も導入非常に短いが、理解しやすいですとにかくUnicodeがJavaでエスケープされる方法。正しい文字を出力するはずです。私は問題が何であるか分かりません。 – Mikaveli

+0

私がSystem.out.println( '\ u00f1eda')を呼び出すと、正しいUnicode文字が出力されます。しかし、私は典型的な文字列演算を行うことができますか?同様に、 "Andria Cast \ u00f1eda"と "Bob Joel"を比較しますか? –

+0

正確には通常と同じです。 Javaでは、エスケープされたUnicodeが単一の文字として扱われるため、通常の文字列操作と比較がすべて適用されるため、特別な処理を行う必要はありません。バイト単位で比較を行うのではなく、便利なStringメソッドを使用してください。 – Mikaveli

答えて

0

JavaはUnicodeを認識します。あなたは、JavaのUnicodeを提供し、次のようにエスケープ:

String str = "\u00F6"; 

あなたはエスケープシーケンスであるなど"Andria Cast\u00f1eda"として文字列を渡すのであれば、それは必要な追加の処理なしで正しく処理されなければなりません。ある

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文字コードをエンコードできないため、一般的な解決策はありません。

+0

grepの出力をこの種の操作を実行できる別のプログラムに供給することは可能でしょうか? –

+0

パイプラインの次のプログラムは、後でその入力ストリームでユニコードをサポートする必要があります。 – Joshua

関連する問題