我使用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字符并将它们映射到它相应的内部表示。
提前致谢!
答案 0 :(得分:0)
一般解决方案是不可能的,因为grep使用的bytewise数据流不能编码所有unicode characeters。
答案 1 :(得分: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!");
}
}
}