我想在以下方法中返回字符串之前将内容转换为 utf-8 字符集:
public static String getContentResult(URL url) throws IOException{
InputStream in = url.openStream();
StringBuilder sb = new StringBuilder();
byte [] buffer = new byte[4096];
while(true){
int byteRead = in.read(buffer);
if(byteRead == -1)
break;
for(int i = 0; i < byteRead; i++){
sb.append((char)buffer[i]);
}
}
in.close();
return sb.toString();
}
我怎样才能做到这一点?
谢谢!
最佳答案
您不想将转换为 UTF-8。您希望(我相信)将传入的数据流解释为 UTF-8。
选项:
创建一个包含传入流的
InputStreamReader
,指定 UTF-8,并一次读取字符 block ,附加到StringBuilder
StringBuilder builder = new StringBuilder(); char[] buffer = new char[4096]; InputStreamReader reader = new InputStreamReader(in, "UTF-8"); int charsRead; while ((charsRead = reader.read(buffer)) != -1) { builder.append(buffer, 0, charsRead); }
使用Guava将整个数据读取为字节数组,然后一次性将其转换:
byte[] data = BytesStreams.toByteArray(in); return new String(data, Charsets.UTF_8);
无论哪种情况,您都应该使用 finally
block 来关闭流,这样即使抛出异常也可以关闭它。
关于java - 将字节数组或 stringbuilder 转换为 utf-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13602465/