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

Android & Java:String.getBytes()无法正确解析转义字符怎么解决?

解决Java字符串转byte[]时转义符未解析的问题

你碰到的这个差异其实很好解释——你的payload变量里的字符串并不是真正包含换行符的"Hi\n",而是字面意义上的"Hi\\n"(也就是把反斜杠\和字母n作为两个独立的字符存着),这就是为什么调用getBytes()后会得到4字节数组;而直接写"Hi\n"时,Java编译器会自动把转义序列\n解析成单个换行符(ASCII码10),所以转成字节数组是3字节。

解决方法

根据你的需求,有两种常见处理方式:

  • 简单替换(仅处理换行符)
    如果你的字符串里只有\n这一种转义序列需要处理,直接用replace()把"\\n"替换成真正的换行符"\n"就行:

    String payload = "Hi\\n"; // 这里的字符串实际包含4个字符:H、i、\、n
    String processedStr = payload.replace("\\n", "\n");
    byte[] resultBytes = processedStr.getBytes(StandardCharsets.UTF_8);
    // 此时resultBytes是3字节:72(H)、105(i)、10(换行符)
    
  • 全面解析所有Java转义序列
    如果你的字符串里可能还有其他转义符(比如\t、\r、\"等),推荐使用Apache Commons Text库的StringEscapeUtils.unescapeJava()方法,它能完整解析所有Java标准转义序列:

    import org.apache.commons.text.StringEscapeUtils;
    
    String payload = "Hi\\nHello\\tWorld";
    String unescapedStr = StringEscapeUtils.unescapeJava(payload);
    byte[] resultBytes = unescapedStr.getBytes(StandardCharsets.UTF_8);
    

快速验证字符串内容

调试时可以通过字符串长度快速判断:

  • 真正包含换行符的"Hi\n"长度是3
  • 包含字面\n的"Hi\\n"长度是4

这样就能快速确认你的变量到底存的是哪种字符串啦。

内容的提问来源于stack exchange,提问作者Chee-Yi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:43:00