我面临的问题是,当我解析带有重音的角色时,我的程序会为该角色随机乱码。有没有什么方法可以解析这些字符,以便它解析出来并强调字符呢?
解析Céline Dion
=> Céline Dion
String fullURLPath = "https://itunes.apple.com/search?term=" + songInfoQuery.replace(" ", "+");
System.out.println("!" + fullURLPath.toString());
URL url = new URL(fullURLPath);
HttpURLConnection request = (HttpURLConnection) url.openConnection();
request.connect();
JsonParser jp = new JsonParser();
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
JsonObject rootobj = root.getAsJsonObject();
JsonArray arr = rootobj.getAsJsonArray("results");
try {
rootobj = arr.get(0).getAsJsonObject();
} catch (IndexOutOfBoundsException e) {
System.out.println("not in itunes");
}
答案 0 :(得分:1)
问题是您正在使用JVM的默认字符集解析发送给您的数据,这与用于编码响应的字符集不同。
查看在浏览器中获取该URL的响应标头,响应将以UTF-8发送。
您应该在创建InputStreamReader
时明确指定字符集:
new InputStreamReader((InputStream) request.getContent(), StandardCharsets.UTF_8)
您可以在启动JVM时将UTF-8指定为默认字符集,但很容易忘记这样做 - 最好在代码中明确指出。