java在python中的getByte()等价物

时间:2015-01-08 09:27:21

标签: java python string bytearray data-conversion

我是蟒蛇的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'
>>> 

请帮助我获得正确的转化。

2 个答案:

答案 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