下载不同编码的在线文本
Downloading online text with different encodings
我正在下载在线文本,可以由用户上传,因此文本可以是 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();
}
由于您有多种可能的编码并且您不知道哪个是正确的,您别无选择,只能在此处使用 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 开始)。
我正在下载在线文本,可以由用户上传,因此文本可以是 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();
}
由于您有多种可能的编码并且您不知道哪个是正确的,您别无选择,只能在此处使用 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 开始)。