java getBytes() 等效于 python

java's getByte() equivalent in python

我是 python 的新手。我有一个 java 方法,它接受一个字符串,将字符串转换为字节数组和 returns 字节数组。该方法看起来像这样。

private static byte[] convert(String str) {
        byte[] byteArray = str.getBytes();
        return byteArray;
    }

convert("sr_shah") 产生这样的字节数组 115 114 95 115 104 97 104。在使用 Charset.defaultCharset() 时,我了解到我机器的默认字符集是 windows-1252

现在我需要在 Python 中创建与上述方法完全等效的方法。我现在面临的问题是将字符串转换为字节数组。我无法在 python 中获得 java 的 getBytes() 等价物。我在互联网上搜索并从 Whosebug 之前关于将字符串转换为字节数组的帖子中获得了很多帮助,但不幸的是,没有一个对我有用。

我使用的方法是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'
>>> 

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

您在 Python 中创建的 bytearray 包含您想要的字节。要查看它们的十进制表示,请逐一打印字节:

>>> for x in bytearray('sr_shah','windows-1252'): print(x)
...
115
114
95
115
104
97
104

你可以这样做:

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() 函数非常接近,尽管它适用于单个字符,因此您需要自己处理数组。