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
相关产品推荐
相关产品推荐

