根据我的理解,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
的编码。
答案 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
)