如何下载包含斯洛文尼亚特殊字符的String文件

问题描述 投票:6回答:7

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

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

android android-networking
7个回答
4
投票

您需要将字符串字节编码为UTF-8。请检查以下代码:

String slovenianJSON = new String(value.getBytes([Original Code]),"utf-8");
JSONObject newJSON = new JSONObject(reconstitutedJSONString);
String javaStringValue = newJSON.getString("content");

我希望它会对你有所帮助!


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
投票

为什么你不使用Android的JSONObject类(以及相关的类)并不完全清楚。但是你可以试试这个:

String str = new String(value.getBytes("ISO-8859-1"), "UTF-8");

但是你真的应该使用JSON库而不是解析自己


1
投票

在此行创建InputStreamReader时:

       BufferedReader r = new BufferedReader(new InputStreamReader(input1));

将charset发送到构造函数,如下所示:

       BufferedReader r = new BufferedReader(new InputStreamReader(input1), Charset.forName("UTF_8"));

1
投票

问题在于字符集 根据维基百科斯洛文尼亚字母表,UTF-8,UTF-16,ISO / IEC 8859-2(Latin-2)支持。查找服务器中使用的字符集,并使用相同的字符集进行编码。 如果是这样的UTF-8编码

       BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream), Charset.forName("UTF_8"));

如果你有不同的字符集使用它。


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服务。


0
投票

我终于发现这种方式对我有用

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

© www.soinside.com 2019 - 2024. All rights reserved.