You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用BufferedReader读文件出现交替空字节 编码问题咨询

问题原因
  • 核心问题是读取文件时未指定正确的字符编码,输入文件本身是UTF-16系列编码(UTF-16LE/UTF-16BE,常见于Windows系统生成的文件),每个字符占2字节存储,ASCII范围内的字符高位字节为0x00。你初始化InputStreamReader时没有传入编码参数,会默认使用操作系统的默认编码(通常是UTF-8或GBK)按单字节解码,导致原本的0x00字节被解码为空字符,和正常字符交替出现。
  • 你之前尝试的事后转码方案无效,因为读取阶段已经用错误编码把二进制数据转成了损坏的字符串,数据丢失已经发生,后续转码无法修复。
解决方法
  1. 先确认输入文件的实际编码:可以用文本编辑器(如Notepad++)打开文件,查看底部状态栏显示的编码,常见场景为UTF-16LE或带BOM的UTF-16
  2. 初始化InputStreamReader时明确指定匹配的编码,示例代码如下:
// 如果是UTF-16LE编码
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream( cmdLnArgs[0] ), "UTF-16LE"));
// 如果是带BOM的UTF-16,直接指定UTF-16即可自动识别大小端
// BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream( cmdLnArgs[0] ), "UTF-16"));
  1. 验证规则:如果无法通过编辑器查看编码,可以读取文件前2-3个字节判断:
    • 开头为FF FE:UTF-16LE
    • 开头为FE FF:UTF-16BE
    • 开头为EF BB BF:UTF-8带BOM

内容的提问来源于stack exchange,提问作者james_t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:18:03