【问题标题】:Special characters handling in Java StringJava字符串中的特殊字符处理
【发布时间】:2013-12-19 17:46:39
【问题描述】:

我必须从网站中检索此 [type of] 字符串:

{"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 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而是'è'! :)

【问题讨论】:

  • 您不需要进行任何更换。 JSON 解析器应该为您处理这一切。顺便说一下,尚不清楚 Java 是从哪里来的……
  • php 使用此字符串为我必须在 Android 应用程序中显示的文章创建网页。 Java部分是处理这个字符串并在我的应用程序中正确显示。
  • 嗯,\u00e0 是您角色的 Unicode 符号。我认为你在某些时候有一些最终的不匹配。您必须进一步描述您在每个应用程序层(包括 db)使用的字符集,以及此时您看到的是 \u00e0 而不是“带有坟墓的小写字母 a”。
  • @eduine:但是 Java 与您的问题有什么关系?真的不清楚您是在寻求 PHP 部分还是 Java 部分的帮助。如果是 Java 部分,为什么没有显示任何 Java 代码?
  • 您使用的是哪个库?什么是 RssJsonObject?我对 Gson Map o = new Gson().fromJson(data, Map.class); 没有任何问题(你可以使用你的类代替 Map)。

标签: java php json


【解决方案1】:

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

如果由于某种原因您得到 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() 也关闭了in

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-12
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多