我是蟒蛇的nebie。我有一个接受字符串的java方法,将字符串转换为字节数组并返回字节数组。该方法看起来像这样。
private static byte[] convert(String str) {
byte[] byteArray = str.getBytes();
return byteArray;
}
convert("sr_shah")
会生成这样的字节数组
115 114 95 115 104 97 104
。在使用Charset.defaultCharset()
时,我发现我的机器的dfault charectorset是windows-1252
。
现在我需要在Python中创建与上述方法完全相同的东西。我现在面临的问题是将字符串转换为bytearray。我无法在python中获得java的getBytes()等价物。我在网上搜索并从stackoverflow的前一篇文章中获取了很多关于将字符串转换为字节数组的帮助,但不幸的是,它们都没有为我工作。
我使用的方法是bytearray(),bytes(),str.encode()
。我用过像编码一样的编码
windows-1252,utf_16,utf_8,utf_16_le,utf_16_be,iso-8859-1
遗憾的是,他们都没有按照我的预期给出正确的结果(比如我从java getBytes()得到的字节数组)。我没有弄到我做错了什么。这就是我在python中尝试的方式。
>>> bytearray('sr_shah','windows-1252')
bytearray(b'sr_shah')
>>> bytearray('sr_shah','utf_8')
bytearray(b'sr_shah')
>>> bytearray('sr_ahah','utf_16')
bytearray(b'sr_ahah')
>>> bytearray('sr_shah','utf_16_le')
bytearray(b'sr_shah')
>>> name = 'sr_shah'
>>> name.encode('windows-1252')
'sr_shah'
>>> name.encode('utf_8')
'sr_shah'
>>> name.encode('latin_1')
'sr_shah'
>>> name.encode('iso-8859-1')
'sr_shah'
>>> name.encode('utf-8')
'sr_shah'
>>> name.encode('utf-16')
'\xff\xfes\x00r\x00_\x00s\x00h\x00a\x00h\x00'
>>> name.encode('utf-16-le')
's\x00r\x00_\x00s\x00h\x00a\x00h\x00'
>>>
请帮助我获得正确的转化。
答案 0 :(得分:4)
你可以这样做:
str = 'sr_shah'
b = [ord(s) for s in str]
print b
**Output**
[115, 114, 95, 115, 104, 97, 104]
ord() built-in function尽可能接近你想要的getByte()函数,虽然它适用于单个字符,所以你需要自己处理数组。
答案 1 :(得分:3)
您在Python中创建的bytearray
包含您想要的字节。要查看它们的十进制表示,请逐个打印字节:
>>> for x in bytearray('sr_shah','windows-1252'): print(x)
...
115
114
95
115
104
97
104