【发布时间】:2015-07-03 09:41:38
【问题描述】:
我有一个像这样用字节写的文件
\r\x00\x00\x00\xd0{"a": "test"}
有以下字节
[13, 0, 0, 0, -48, 123, 34, 97, 34, 58, 32, 34, 116, 101, 115, 116, 34, 125]
当这个文件被读入 Java 时,我得到了所有的转义
\\r\\x00\\x00\\x00\\xd0{"a": "test"}
当我在这个字符串上执行.getBytes() 时,我得到了
[92, 114, 92, 120, 48, 48, 92, 120, 48, 48, 92, 120, 48, 48, 92, 120, 100, 48, 123, 34, 97, 34, 58, 32, 34, 116, 101, 115, 116, 34, 125]
我必须将字符串转换为有效字节,不幸的是我无法更改文件的读取方式。我知道在 Python 中,你用'rb' 模式打开一个文件,你就可以开始了。如果java有这个能力,我就用不上。
简而言之,如何将 Java 读取的字符串转换为写入文件的原始字节数组?
对不起,如果这个问题很简单,但我对 Java 很陌生。
编辑:所以我相信我的问题与建议的“重复问题”链接不同。它不会获取 java 字符串中的每个文字值并将其转换回一个字节。 java中的字符串已被读者转义。 \x00 现在是 \\x00,这不是同一个字节值。所以我想我需要一些方法来取消转义字符串?
在十六进制编辑器中查看的文件
0000000: 5c72 5c78 3030 5c78 3030 5c78 3030 5c78 \r\x00\x00\x00\x
0000010: 6430 7b22 6122 3a20 2274 6573 7422 7d0a d0{"a": "test"}.
在十六进制编辑器中查看 java 的字符串
0000000: 5c5c 725c 5c78 3030 5c5c 7830 305c 5c78 \\r\\x00\\x00\\x
0000010: 3030 5c5c 7864 307b 2261 223a 2022 7465 00\\xd0{"a": "te
0000020: 7374 227d 0a st"}.
【问题讨论】:
-
经过充分解释和格式化的问题绝不是愚蠢的,至少对我来说是这样。
-
你读的怎么样?
-
您从 getBytes() 获得的结果是您所期望的吗?
-
@Shar1er80 第一个数组是我所期待的。
-
来吧,这个问题每天都会被问到,请 VTC-duplicate
标签: java