Java String中的特殊字符处理

时间:2013-12-03 15:26:17

标签: java php json

我要从网站上检索这种[类型]字符串:

{"title":"En Loz\u00e8re, les entreprises sont incit\u00e9es \u00e0 passer \u00e0 la fibre","author":"Fran\u00e7ois Le Gall","date":...

我想要一个像这样的对象:

myObject{
  String title = "En Lozère, les entreprises sont incitées à passer à la fibre";
  String author = "François le Gall";
  ...
}

这是我在java中检索我的String的方式:

String myJsonString = "";
    try{

        URLConnection conn = new URL("http://www.ariase.com/webservices/getArticle.php?id=3019").openConnection();

        InputStream in = conn.getInputStream();
        Scanner s = new Scanner(in);
        s.useDelimiter("\\A");

        while (s.hasNext())
            myJsonString += s.next();

        s.close();
        in.close();

    } catch(SocketTimeoutException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); }

    RssJsonObject myParsedJsonObject = RssJsonObject.parseJson(myJsonString);

这是一个Json对象,我必须解析,没问题,但我有像\u00e0这样的特殊字符,我不知道如何替换......

我可以做几十个replaceAll("\u00e0", "à");但是,有没有任何预制功能呢?

我也可以编辑发送给我这个字符串的php页面,也许我已经忘记了任何url_encode或者其他东西,我在php上很糟糕。

这是我的PHP代码:

$query = "SELECT * FROM SITE.rssitem WHERE NEWSID = '".$newsId."'";

$eligibiliteDB->request($query);

$answer = $eligibiliteDB->first();

$tab =  array(
    "title"         => strip_tags($answer['TITLE']),
    "author"        => strip_tags($answer['AUTHOR']),
    "date"          => strip_tags($answer['DATE']),
    "img"           => strip_tags("http://www.ariase.com/fr/news".$answer['MINIATURE']),
    "description"   => strip_tags($answer['DESCRIPTION']),
    "content"       => strip_tags($answer['FULLDESCRIPTION'].' '.$answer['CONCLUSION'])
);

echo json_encode($tab);

编辑:

上面的我的Java代码。

我不知道我的错误是来自java还是php部分。 我知道所有这些编码的东西,不太了解它,只知道我不想在我的应用程序中看到\u00e8而是'è'! :)

1 个答案:

答案 0 :(得分:0)

在Java源代码中,对于Unicode字符U + 00E0 LETTER A-A_GAUCHE,转义"\u00e0"实际上与"à"相同。您可能还会在JavaScript和JSON数据中找到此类转义。将其作为JSON对象读取应该为String对象提供正确的Unicode à

由于某种原因你应该得到6个字符\u00e0,那么应该采取不同的方式。

但是,您也可以继续使用Apache commons中的类StringEscapeUtils将其转换回来。

String s = "\\u00e0"; // How one would represent the six chars \,u,0,0,e,0.
s = StringEscapeUtils.unescapeJava(s);

由于in.close()也关闭了s.close(),因此不需要BTW in