java - 将字节数组或 stringbuilder 转换为 utf-8

标签 java

我想在以下方法中返回字符串之前将内容转换为 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/

相关文章:

java - 访问 sp 时出现 Callable statement 错误

java - 如何使 JSONObject 的 toString() 将 UTF-8 字符编码为 un​​icode,就像 PHP 的 json_encode 中一样?

java - 以 Java 运行一个简单的文本文件

java - 获取形状相交的中心(2D)

java - JDK 8 的类型推断如何与泛型一起工作?

Java注解在注解声明中执行一个方法(用于android)

java - 用 @MockBean 模拟的 RestTemplateBuilder 为 null

java - 如何将键盘命令添加到预先存在的 javafx 场景中?

java - 返回调用者已经拥有实例的对象的输入流

java - 轮询是否会阻塞 LinkedBlockingQueue 中的其他操作?