使用 Java,如何处理以字符串形式提供的二进制数据:b'\x00@\xfftest\x0d \x00'

问题描述 投票:0回答:1

b'\x00@\xfftest\x0d\n\x00'
我有一个 .csv 文件,其中一列是二进制数据,编码为混合有 ASCII、控制字符和转义十六进制的字符串。

你能告诉我这种表示法/编码的正式名称吗?是否有一个 Java 类用于将这样的字符串转换为 byte[],以及将 byte[] 转换为这种格式的字符串?

java string encoding binary
1个回答
0
投票

我自己回答,这就是我能找到的:因为 CSV 文件中字符串的格式是 Python 字节文字,所以没有理由期望有一个固定的 Java 实现。同时,感谢评论者,我能够弄清楚如何在 Python 中进行简单的转换,这样我现在就可以在 Python 中实现一个解析器了。

转换为

import ast
originalbytes=b'\x00\xffTest\n\x00'
print('Bytes literal:',databytes)
print('Bytes list:   ',list(databytes))
datastring=str(originalbytes)
print('String:       ',datastring)
restoredbytes=ast.literal_eval(datastring)
print('Bytes list:   ',list(restoredbytes))
字节文字:b'\x00\xffTest
\x00'
字节列表:[0, 255, 84, 101, 115, 116, 10, 0]
字符串:b'\x00\xffTest
\x00'
字节列表:[0, 255, 84, 101, 115, 116, 10, 0]

令人费解但偶然的行为是 str() 函数(没有指定编码)是获取类型 bytes 对象转换为类型 string 对象的唯一方法。如果我在 str() 函数中指定编码,例如 utf-8、ascii 或 ISO-8859-1 或尝试使用 databytes.decode(),则在遇到十六进制数字时会发生错误,例如编解码器无法解码位置 1 中的字节 0xff:序号不在范围 (128)

© www.soinside.com 2019 - 2024. All rights reserved.