我正在尝试下载包含斯洛文尼亚字符的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());
}
我想知道如何正确下载字符。
您需要将字符串字节编码为UTF-8。请检查以下代码:
String slovenianJSON = new String(value.getBytes([Original Code]),"utf-8");
JSONObject newJSON = new JSONObject(reconstitutedJSONString);
String javaStringValue = newJSON.getString("content");
我希望它会对你有所帮助!
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());
}
为什么你不使用Android的JSONObject类(以及相关的类)并不完全清楚。但是你可以试试这个:
String str = new String(value.getBytes("ISO-8859-1"), "UTF-8");
但是你真的应该使用JSON库而不是解析自己
在此行创建InputStreamReader时:
BufferedReader r = new BufferedReader(new InputStreamReader(input1));
将charset发送到构造函数,如下所示:
BufferedReader r = new BufferedReader(new InputStreamReader(input1), Charset.forName("UTF_8"));
问题在于字符集 根据维基百科斯洛文尼亚字母表,UTF-8,UTF-16,ISO / IEC 8859-2(Latin-2)支持。查找服务器中使用的字符集,并使用相同的字符集进行编码。 如果是这样的UTF-8编码
BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream), Charset.forName("UTF_8"));
如果你有不同的字符集使用它。
由于瑞典人的角色,我遇到了同样的问题。
所以我使用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服务。
我终于发现这种方式对我有用
InputStream input1 = new BufferedInputStream(conection.getInputStream(),300);
BufferedReader r = new BufferedReader(new InputStreamReader(input1,“Windows-1252”));
我想通过这个windows-1252,把json文件放在android应用程序文件夹的资产文件夹中,它显示了上面指定的相同的特殊字符,在那里它显示了自动建议选项,将编码改为UTF-8,ISO-8859- 1,ASCII和Windows-1252,所以我改为windows-1252,它在android studio中工作,我在我们的代码中复制了相同的工作。