Python String to Java byte []

时间:2015-08-21 13:18:02

标签: jython

根据我的理解,Python 2字符串(类型str)只不过是一个字节序列。如何将这样的字符串转换为Java字节数组,显式?

天真的尝试不起作用:

from jarray import array
myStr = 'some str object'
myJavaArr = array(myStr, 'b') # TypeError: Type not compatible with array type

我的理由是,当Jython隐式地将Python字符串转换为Java代码时,它会将其转换为Java字符串,因为它不知道str的编码。

2 个答案:

答案 0 :(得分:3)

我发现了一种实用方法:

from org.python.core.util import StringUtil
myJavaArr = StringUtil.toBytes(myStr)

答案 1 :(得分:0)

str对象传递给jarray.array()的原始方法在Jython 2.5及更早版本中起作用。

现在,您必须先将str转换为数字序列(例如列表,元组或bytearray):

myStr = 'some str object'
myJavaArr = array( bytearray(myStr), 'b')

myStr = 'some str object'
myList = [ord(ch) for ch in myStr]
myJavaArr = array( myList, 'b')

(另请参见https://sourceforge.net/p/jython/mailman/message/35003179/

还要注意,Java的byte类型是 signed 。如果任何整数的值都在-128..127范围之外,则转换将失败。如果您以Python中的 unsigned 字节值开头,则需要对其进行转换。 (例如,将其应用于每个值:if 0x80 <= i <= 0xFF: i = i - 256