我通过Python与Java应用程序连接.我需要能够构造包含utf-8字符串的字节序列.Java在DataInputStream.readUTF()中使用修改后的utf-8编码,python不支持(至少)
有人能指出我在python中构造java修改的utf-8字符串的正确方向吗?
更新#1:要了解更多有关java修改的utf-8的信息,请在此处的第550行上的DataInput接口中查看readUTF方法,或者在Java SE文档中查看.
更新#2:我正在尝试与第三方JBoss Web应用程序进行交互,该应用程序正在使用此修改后的utf8格式通过调用DataInputStream.readUTF来读取字符串中的字符串(对于普通java utf8字符串操作的任何混淆感到抱歉).
提前致谢.
您可以忽略修改的UTF-8编码(MUTF-8)并将其视为UTF-8.在Python方面,你可以像这样处理它,
我在PHP中完成了这一点,Java根本没有抱怨我的编码(至少在Java 5中).
MUTF-8主要用于JNI和其他具有空终止字符串的系统.与普通UTF-8的唯一区别是U + 0000是如何编码的.普通UTF-8使用1字节编码(0x00),MUTF-8使用2字节(0xC0 0x80).首先,您不应该在任何Unicode文本中使用U + 0000(无效的代码点).其次,DataInputStream.readUTF()不强制执行编码,因此它很乐意接受任何一个.
编辑:Python代码应该是这样的,
def writeUTF(data, str):
utf8 = str.encode('utf-8')
length = len(utf8)
data.append(struct.pack('!H', length))
format = '!' + str(length) + 's'
data.append(struct.pack(format, utf8))
Run Code Online (Sandbox Code Playgroud)
好吧,如果您需要阅读 的格式DataInput.readUTF,我怀疑您只需将(有详细记录的)格式转换为 Python 即可。
看起来并不是特别难做。读取长度和二进制数据本身后,我建议您使用第一遍来计算输出中将包含多少个 Unicode 字符,然后在第二遍中相应地构造一个字符串。如果不了解 Python,我不知道如何有效构造字符串的细节,但考虑到链接规范,我无法想象这会非常困难。您可能希望查看现有 UTF-8 解码器的源代码作为起点。
| 归档时间: |
|
| 查看次数: |
3737 次 |
| 最近记录: |