当我向服务器请求(GET)内容时,我能够得到响应: ķ??
但实际内容是:KòÉ
为了解决这个问题,我正在尝试使用UTF-8格式,同时保存和读取文件中的内容,如下所示:
//保存内容
OutputStreamWriter sout = new OutputStreamWriter (new FileOutputStream(new File(path)),Charset.forName("UTF-8"));
BufferedWriter buff_out= new BufferedWriter(sout);
int line = 0;
while((line = buff_in.read()) != -1)
buff_out.write(line);
//阅读内容
InputStream inputStreamRead = new FileInputStream(path);
StringBuilder stringBuilder = null;
InputStreamReader inputStreamReader = new InputStreamReader(inputStreamRead, Charset.forName("UTF-8"));
BufferedReader buffReader= new BufferedReader(inputStreamReader);
String line;
stringBuilder = new StringBuilder();
try
{
while (( line = buffReader.readLine()) != null)
{
stringBuilder.append(line);
stringBuilder.append('\n');
}
Log.d("Main", "Test:: "+stringBuilder.toString());
}
在上述逻辑的帮助下,我不会将实际内容视为KòÉ。
我也试过读字节。任何人都可以帮助我解决这个问题。
提前致谢。
答案 0 :(得分:1)
您可以尝试通过
删除它
跨越spanned = Html.fromHtml(stringBuilder.toString(),this,null);
尝试打印跨文本。
答案 1 :(得分:0)
假设close()
被正确调用,您的代码工作正常。
有人可能会使用try-with-resources:
try (BufferedWriter buff_out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(new File(path)), StandardCharsets.UTF_8))) {
...
} // Automatic close
也可以使用:
String path = ...
byte[] content = Files.readAllBytes(Paths.get(path));
String s = new String(content, StandardCharsets.UTF_8);
在JavaSE发行版中使用标准可用CharSets的StandardCharsets常量意味着您不需要处理UnsupportedEncodingException(UTF-8始终可用)。
错误源于其他来源。控制台(IDE或操作系统命令行)可能使用平台编码,可能无法转换这些Unicode字符。
使用功能强大的程序员编辑器编辑文件,如免费的NotePad ++(Windows)或JEdit。 他们可以处理编码。
您还可以执行字节转储以检查显示的?
是否确实是字符串中的问号:
System.out.println(Arrays.toString(string.getBytes(StandardCharsets.UTF_8)));
System.out.println(string.contains("?"));
未显示的服务器通信似乎是罪魁祸首,服务器应将编码设置为UTF-8,客户端执行get with header
Accept-Encoding: UTF-8
并以UTF-8读取响应。这可以通过浏览器中的手动URL进行测试。检查HTML源代码以查看Unicode是否未作为实体(&12345;
)提供。