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

Buffer转字符串出现LF十六进制标识10导致HTML中JS运行异常求助

问题根因

你看到的字面10替换了原本的换行位置,本质是把LF换行符转成了对应的数值字符串"10",没有保留原始的换行字符。

注:你提到的“LF的十六进制代码10”是进制混淆:LF的十六进制值是0x0A,十进制ASCII值是10,这里出现的字面10就是把这个十进制数值转成了字符串。

  • 你贴的示例中10的出现位置正好对应原HTML的换行节点(DOCTYPE结束、html标签结束、head标签开始),完全匹配换行符的出现场景。
  • 你贴的现有scanfile代码本身没有做这个转换,要么是后续处理逻辑漏了这段,要么是你误把字节数组打印的数值结果当成了文件内容。

现有代码的额外隐患

  • 你用的无参FileReader默认走系统平台编码,没有指定原HTML头部标注的UTF-8,如果当前运行环境默认编码不是UTF-8,会出现字符乱码,甚至触发解析异常。
  • 你用System.lineSeparator()替换原文件的换行符,会把原文件的换行格式统一改成当前平台的格式,和原网页的换行格式不一致,可能导致其他格式问题。
修复方案

1. 替换读取逻辑,完整保留原HTML的字符(包括换行)

不要用readLine()(它会丢弃原换行符),直接按字符流读取完整内容,同时指定UTF-8编码:

public static String scanfile(File file) {
    StringBuilder sb = new StringBuilder();
    // 用try-with-resources自动关闭流,避免资源泄漏
    try (BufferedReader br = new BufferedReader(
            new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) {
        int c;
        // 逐字符读取,完整保留原文件所有内容,包括换行符
        while ((c = br.read()) != -1) {
            sb.append((char) c);
        }
        Log.i(TAG, sb.toString());
        return sb.toString();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

2. 排查所有涉及换行符处理的逻辑

如果你的后续代码里有类似把换行符转成数值的写法,直接删掉:

// 错误写法:会输出字符串"10"
sb.append(String.valueOf((int) '\n'));
// 正确写法:直接追加换行字符
sb.append('\n');

如果不需要改动原换行格式,直接按上面的逐字符读取即可,不需要手动处理换行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 04:24:01