2016-01-20 97 views
1

我面临的问题是,当我用一个口音分析一个字符时,我的程序会为该字符吐出随机的乱码。有没有什么办法可以解析出这些字符,这样它就可以解析出来并重写字符呢?Json分析重音字符

解析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

请勿使用异常处理来检查“not in itunes”情况。除了事实上它并不是一个特例,你不知道是否由于'arr.get(0)'或'getAsJsonObject()'中发生的事件而发生了IOOBE。检查数组的长度。 –

+0

对,我只是使用它作为测试的错误检查方法,我一定会改变, – QQPrinti

回答

1

的问题是,你正在分析使用JVM的默认字符集,这是用来编码响应的字符集不同被送回给您的数据。

查看在浏览器中获取该URL的响应头,响应以UTF-8形式发送。

当你创建你应该明确地指定字符集,你InputStreamReader

new InputStreamReader((InputStream) request.getContent(), StandardCharsets.UTF_8) 

你可以另外指定UTF-8作为默认字符集开始你的JVM时,但它很容易忘记这样做 - 它最好在你的代码中明确。

+0

我有一个预感,这是由于字符集,但这并没有改变任何东西,不幸 – QQPrinti

+0

@QQPrinti它绝对是用charsets做。如果你将ISO-8859-1的UTF-8字节解释为“é”,你将得到''''''''。 –

+0

你是对的,我很尴尬地说我在做什么,但你已经钉了它!谢谢 – QQPrinti