我正在尝试下载包含斯洛文尼亚字符的json
文件,在将json
文件作为字符串下载时,我将获得json数据中指定的特殊字符
"send_mail": "Po�lji elektronsko sporocilo.",
"str_comments_likes": "Komentarji, v�ecki in mejniki",
我正在使用的代码
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
try {
InputStream input1 = new BufferedInputStream(url.openStream(), 300);
String myData = "";
BufferedReader r = new BufferedReader(new InputStreamReader(input1));
StringBuilder totalValue = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
totalValue.append(line).append('\n');
}
input1.close();
String value = totalValue.toString();
Log.v("To Check Problem from http paramers", value);
} catch (Exception e) {
Log.v("Exception Character Isssue", "" + e.getMessage());
}
我想知道如何正确下载字符。
答案 0 :(得分:4)
您需要将字符串字节编码为UTF-8。请检查以下代码:
String slovenianJSON = new String(value.getBytes([Original Code]),"utf-8");
JSONObject newJSON = new JSONObject(reconstitutedJSONString);
String javaStringValue = newJSON.getString("content");
我希望它会对你有所帮助!
答案 1 :(得分:2)
while循环中的解码行可以正常工作。另外,如果try catch
IOException
块中添加连接
URL url = new URL(f_url[0]);
try {
URLConnection conection = url.openConnection();
conection.connect();
InputStream input1 = new BufferedInputStream(url.openStream(), 300);
String myData = "";
BufferedReader r = new BufferedReader(new InputStreamReader(input1));
StringBuilder totalValue = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
line = URLEncoder.encode(line, "UTF8");
totalValue.append(line).append('\n');
}
input1.close();
String value = totalValue.toString();
Log.v("To Check Problem from http paramers", value);
} catch (Exception e) {
Log.v("Exception Character Isssue", "" + e.getMessage());
}
答案 2 :(得分:2)
为什么您不使用Android的JSONObject类(和相关类)并不完全清楚。不过你可以试试这个:
String str = new String(value.getBytes("ISO-8859-1"), "UTF-8");
但你真的应该使用JSON库而不是自己解析
答案 3 :(得分:1)
在此行创建InputStreamReader时:
BufferedReader r = new BufferedReader(new InputStreamReader(input1));
将charset发送到构造函数,如下所示:
BufferedReader r = new BufferedReader(new InputStreamReader(input1), Charset.forName("UTF_8"));
答案 4 :(得分:1)
问题在于字符集
根据维基百科斯洛文尼亚字母表,UTF-8,UTF-16,ISO / IEC 8859-2(Latin-2)支持。找到服务器中使用的字符集,并使用相同的字符集进行编码。
如果是这样的UTF-8编码
BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream), Charset.forName("UTF_8"));
如果您使用了不同的字符集。
答案 5 :(得分:1)
由于瑞典人的角色,我遇到了同样的问题。
所以我使用BufferedReader解决了这个问题。我已使用StandardCharsets.ISO_8859_1转换了响应并使用该响应。请找到我的答案如下。
BufferedReader r = new BufferedReader(new InputStreamReader(response.body().byteStream(), StandardCharsets.ISO_8859_1));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null)
{
total.append(line).append('\n');
}
并使用此total.toString()
并将此回复分配给我的班级。
我使用Retrofit来调用Web服务。
答案 6 :(得分:0)
我终于找到了对我有用的方式
InputStream input1 = new BufferedInputStream(conection.getInputStream(),300);
BufferedReader r = new BufferedReader(new InputStreamReader(input1," Windows-1252"));
我通过这个windows-1252想出来,把json文件放在android应用程序文件夹的asset文件夹中,它显示了如上所述的相同特殊字符,在那里显示了自动建议选项,将编码改为UTF-8,ISO -8859-1,ASCII和Windows-1252,所以我改为windows-1252,它在android studio中工作,我在我们的代码中复制了相同的工作。