Android:显示从文件中读取的西班牙语(以及其他)字符

时间:2014-04-25 20:44:28

标签: java android encoding character-encoding

我知道在SO周围有很多类似的问题,但它们或者提供了一个特定于案例的解决方案,我无法适应我的问题,或者根本看起来根本不工作。

我有一个多语言应用程序,可以从互联网上下载某些信息并将其存储到一个文件中供以后使用。这就是存储的完成方式:

public static void writeStringToFile(String string, File file)
        throws IOException {

    if (!file.exists()) {
        file.createNewFile();
    }

    FileOutputStream outputStream = new FileOutputStream(file);
    outputStream.write(string.getBytes("UTF-8"));
    outputStream.close();
}

但是后来,当读取该文件的西班牙语版本时,该应用程序会显示特殊字符,例如ñ,因为I-ve内部带有问号的黑色钻石试图:

  • 在我的计算机中下载信息以检查文件是否正常并将其手动放入应用程序中,以便从中读取而不是自行下载。文件很好,但应用程序没有显示任何变化。
  • 用“ISO 8859-1”替换getBytes的参数,但结果的唯一区别是这个奇怪的字符是常规问号。
  • 将文件一旦下载,从设备复制到计算机,检查是否正常,并且已经出错了(代替问号显示“空方”字符,如果我没有显示wget文件)。

所以我几乎可以肯定问题在于我如何编写文件,因为它从服务器中运行良好但存储错误。但我已经花了很多时间看这个方法,我找不到问题是什么......任何线索?

编辑:这是我下载信息的方式。

    public static InputStream performGetRequest(String uri)
        throws IOException, URISyntaxException, ServerIsCheckingException {
    HttpResponse response;

    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet();
    request.setURI(new URI(uri));
    response = client.execute(request);
    if (response.getStatusLine().getStatusCode() == 409) {
        throw new ServerIsCheckingException();
    }
    else {
        return response.getEntity().getContent();
    }
}

要将它转换为我后来传递给方法writeStringToFile的String对象,我使用

    public static String inputStreamAsString(InputStream is) throws IOException {
    java.util.Scanner s = new java.util.Scanner(is);
    String ret;
    ret = s.useDelimiter("\\A").hasNext() ? s.next() : "";
    return ret;
}

我还认为writeStringToFile可能是问题所在,但我尝试了另一种替代方法,它指定使用UTF-8并且也不起作用。

1 个答案:

答案 0 :(得分:2)

您必须确保在同一个字符集中读取您尝试编写的文档。在您的情况下,如果您正在下载的文档是西班牙文,它可能会写在UTF-8ISO-8859-1中,因此您必须在读取和写入时设置相应的enconding。

您可以使用HttpProtocolParams.setContentCharset()将相应的字符集设置为BasicHttpParams对象。

这可能会有所帮助: