我正在下载可由用户上传的在线文字,因此文字可以是UTF-8,ISO-8859-1等......
问题在于我不知道编码是否正在使用用户,如果用户上传了UTF-8文本,它的工作完美但是如果用户上传了带有重音符号的ISO-8859-1文本(á é等..)这些字符没有正确显示。
我试图将文本编码强制为UTF-8,但它并不适用于所有情况(buffer.toString(“UTF-8”))
这是我的代码:
javaUrl = new URL(URLParser.parse(textResource.getUrlStr()));
connection = javaUrl.openConnection();
connection.setConnectTimeout(2000);
connection.setReadTimeout(2000);
InputStream input = new BufferedInputStream(connection.getInputStream());
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
try{
byte [] data = new byte [1024];
while ((nRead = input.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
total = buffer.toString();
}finally{
input.close();
buffer.close();
}
答案 0 :(得分:2)
由于你有多种可能的编码而且你不知道哪种编码是正确的,你别无选择,只能在这里使用CharsetDecoder
。
计划:
InputStream
; byte[]
数组; 以下是找到正确编码的一种可能方法:
public boolean isCharset(final Charset charset, final byte[] contents)
throws IOException
{
final CharsetDecoder decoder = charset.newDecoder()
.onMalformedInput(CodingErrorAction.REPORT);
final ByteBuffer buf = ByteBuffer.wrap(contents);
try {
decoder.decode(buf);
return true;
} catch (CharacterCodingException ignored) {
return false;
}
}
尝试使用不同的编码集(最好从UTF-8开始)。