【发布时间】:2015-11-22 06:07:21
【问题描述】:
我有一个 JSON 格式的字符串。有像\u0025 这样的字符,我需要将它们转换为它们所指的实际字符。
在 Java 中是否有任何直接的方法可以将这些字符转换为实际字符?
类似myString.convertToUTF-8();
我正在拨打Graph API 并收到 JSON 格式的响应。我想使用 JSON parser 或 JavaScript 解析器来解析 JSON 并获取值。这就是我所需要的。
我使用了谷歌浏览器的控制台,当我将响应分配给一个变量时。它给了我一个错误,告诉我Uncaught SyntaxError: Unexpected identifier(…)。
在 JavScript 中,我想使用 JSON.parse(jsonString)。但实际上我无法将值分配给jsonString。
为了在 Java 中转换这些字符,我已经尝试过以下几行,它们根本不会改变字符串!
String responseFromFB = http.sendRequest(url);
byte[] b = responseFromFB.getBytes();
String str= new String(b, "UTF-8");
这是我拥有的 sendRequest() 函数!
private String httpReq(String URL, String QueryString) throws Exception
{
String url = URL;
String urlParameters = QueryString;
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Accept-Charset", "UTF-8");
con.setRequestProperty("Content-Type", "application/json; charset=utf-8");
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
}
【问题讨论】:
-
new String(string, encoding),不是吗? -
你的 JSON 解析器应该处理这个问题。你能展示一下你用来解析 JSON 的代码吗?
-
\u0025是 Java 中由 6 个实际字符组成的单个 unicode 代码点的内部表示。如果你的字符串中有它,那么你需要使用正则表达式或其他东西来用它们的实际表示替换它们,尽管你显然不应该首先拥有它。此外,在 Java 中,除了 UTF-16 之外,你不能有任何字符串,所以整个问题相当混乱。 -
我稍微编辑了我的问题。 @Voo:那么我需要识别所有可能的字符并尝试用实际字符替换它们!没有?!
-
@Suo6613 在你有
String responseFromFB = http.sendRequest(url);的时候,它已经结束了,你有一个 UTF-16 字符串,getBytes() 部分对你没有任何好处。由于您的输入是 JSON,您应该使用 JSON 解析器,而不仅仅是低级 http API,然后自己处理它。治疗基础疾病,而不是症状。也就是说,不,您不必分别处理每一个,因为无论如何概念都是相同的。
标签: javascript java json utf-8 org.json