如何使用grep unescape非美国,en,ASCII类型的字符?

时间:2011-01-27 16:16:19

标签: java unicode escaping grep facebook-graph-api

我使用grep来解析通过facebook Open Graph API获得的朋友列表。我主要能够使用以下命令执行我想要的操作:bash:

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理解\ u00f1eda是unicode代表卷曲n?

不想通过解析java中的字符串并手动取消unicode来解决这个问题。我非常希望指示grep来处理这种情况,或者是另一种广泛用于bash的GNU或开源工具。

此时,我将整个输入作为文件提供给java程序,而不必担心OMG,这是一个unicode转义序列!!? Java会自然地检测到unicode字符并将它们映射到它相应的内部表示。

提前致谢!

2 个答案:

答案 0 :(得分:0)

一般解决方案是不可能的,因为grep使用的bytewise数据流不能编码所有unicode characeters。

答案 1 :(得分: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!");
        }

    }

}