如何下载包含斯洛文尼亚

时间:2017-12-20 11:04:44

标签: android android-networking

我正在尝试下载包含斯洛文尼亚字符的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());
}

我想知道如何正确下载字符。

7 个答案:

答案 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中工作,我在我们的代码中复制了相同的工作。