登录
首页 >  文章 >  java教程

Java中指定字符集的InputStreamReader用法

时间:2026-03-27 22:45:56 291浏览 收藏

在 Java 中使用 InputStreamReader 时,务必手动指定字符集(如 UTF-8 或 GB18030),避免依赖平台默认编码引发中文乱码——推荐通过 StandardCharsets.UTF_8 或 Charset.forName("GB18030") 等类型安全方式传入 Charset 对象,既提升可读性又能在编译期捕获错误;若用字符串形式(如 "UTF-8" 或 "GB18030")则需注意拼写正确性,且应优先选用标准化、兼容性更强的 GB18030 而非非标准的 GBK;看似简单的一行代码,却是保障跨平台文本正确解码的关键防线。

怎么在InputStreamReader中手动指定UTF8或GBK字符集

InputStreamReader 中手动指定字符集(如 UTF-8 或 GBK),关键是在构造时传入对应的 Charset 对象或字符集名称字符串,而不是依赖平台默认编码。

使用 Charset 类指定(推荐)

这种方式类型安全、可读性强,且编译期就能检查字符集名是否合法:

  • UTF-8:new InputStreamReader(inputStream, StandardCharsets.UTF_8)
  • GBK:new InputStreamReader(inputStream, Charset.forName("GBK"))Charset.forName("GB18030")(更兼容,能覆盖 GBK)

使用字符集名称字符串指定

直接传字符串,简洁但运行时才校验,拼错会抛 UnsupportedEncodingException

  • UTF-8:new InputStreamReader(inputStream, "UTF-8")
  • GBK:new InputStreamReader(inputStream, "GBK")"GB18030"

注意事项

避免不指定字符集——否则会调用 Charset.defaultCharset(),结果依赖运行环境,极易导致中文乱码;

GBK 不是标准 IANA 字符集名,部分旧版 JDK 可能不识别 "GBK",建议优先用 "GB18030"

如果输入流来自网络或文件,确保源头实际编码与指定一致,否则仍会解码错误。

完整示例

读取一个 UTF-8 编码的文本文件:

try (FileInputStream fis = new FileInputStream("data.txt");
     InputStreamReader reader = new InputStreamReader(fis, StandardCharsets.UTF_8)) {
    int c;
    while ((c = reader.read()) != -1) {
        System.out.print((char) c);
    }
}

读取 GB18030 编码的文件(兼容 GBK):

InputStreamReader reader = new InputStreamReader(fis, "GB18030");
不复杂但容易忽略

本篇关于《Java中指定字符集的InputStreamReader用法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>