我正在通过 Python 与 Java 应用程序交互。我需要能够构造包含 UTF-8 字符串的字节序列。 Java 使用修改后的 UTF-8 编码DataInputStream.readUTF()
Python 不支持(但至少)
有人能指出我在 Python 中构建 Java 修改的 UTF-8 字符串的正确方向吗?
更新#1:要了解有关 Java 修改后的 UTF-8 的更多信息,请查看readUTF()
来自第 550 行 DataInput 接口的方法here, or 在 Java SE 文档中.
更新#2:我正在尝试与第三方 JBoss Web 应用程序交互,该应用程序使用此修改后的 UTF-8 格式通过 POST 请求读取字符串,方法是调用DataInputStream.readUTF()
(对于正常 Java UTF-8 字符串操作的任何混淆,我们深表歉意)。
你可以忽略修改后的 UTF-8 编码(MUTF-8) 并将其视为 UTF-8。在Python方面,你可以这样处理,
- 将字符串转换为普通 UTF-8 并将字节存储在缓冲区中。
- 将 2 字节缓冲区长度(不是字符串长度)写入大端字节序中的二进制。
- 写入整个缓冲区。
我已经在 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))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)