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