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

How to download String file which contain special characters of slovenia

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

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

在这一行创建 InputStreamReader 时:

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

像这样将字符集发送到构造函数:

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

while 循环中的解码行可以工作。如果 IOException

,您还应该在 try catch 块中添加您的连接
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 的 JSON 对象 class(以及相关的 classes)。不过,您可以试试这个:

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

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

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

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

希望对您有所帮助!

字符集有问题

根据 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() 并将此回复分配给我的 class。

我已经使用 Retrofit 来调用网络服务。

我终于找到了适合我的方法

InputStream input1 = new BufferedInputStream(conection.getInputStream(), 300);

BufferedReader r = new BufferedReader(new InputStreamReader(input1, "Windows-1252"));

我通过这个 windows-1252 得出结论,将 json 文件放入 android 应用程序文件夹的资产文件夹中,它显示了与上面指定的相同的特殊字符,它显示了自动建议选项将编码更改为 UTF-8ISO-8859-1ASCIIWindows-1252,所以我更改为 windows-1252,它在 android 工作室工作我在我们的代码中复制了相同的代码,这很有效。