我知道在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内部带有问号的黑色钻石试图:
所以我几乎可以肯定问题在于我如何编写文件,因为它从服务器中运行良好但存储错误。但我已经花了很多时间看这个方法,我找不到问题是什么......任何线索?
编辑:这是我下载信息的方式。
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并且也不起作用。
答案 0 :(得分:2)
您必须确保在同一个字符集中读取您尝试编写的文档。在您的情况下,如果您正在下载的文档是西班牙文,它可能会写在UTF-8
或ISO-8859-1
中,因此您必须在读取和写入时设置相应的enconding。
您可以使用HttpProtocolParams.setContentCharset()
将相应的字符集设置为BasicHttpParams
对象。
这可能会有所帮助: