gpt4 book ai didi

Java 在 Python 中修改 UTF-8 字符串

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:36:34 26 4
gpt4 key购买 nike

我正在通过 Python 与 Java 应用程序交互。我需要能够构建包含 UTF-8 字符串的字节序列。 Java 在 DataInputStream.readUTF() 中使用修改后的 UTF-8 编码,Python (yet at least)

不支持该编码

谁能指出我在 Python 中构造 Java 修改的 UTF-8 字符串的正确方向?

更新 #1:要了解更多关于 Java 修改后的 UTF-8 的信息,请查看第 550 行 DataInput 接口(interface)中的 readUTF() 方法 here , 或 here in the Java SE docs .

更新 #2:我正在尝试与第三方 JBoss Web 应用程序交互,该应用程序使用此修改后的 UTF-8 格式通过调用 DataInputStream.readUTF() 通过 POST 请求读取字符串(对于对正常 Java UTF-8 字符串操作的任何混淆,我们深表歉意)。

最佳答案

您可以忽略Modified UTF-8 Encoding (MUTF-8) 并将其视为UTF-8。在 Python 端,你可以这样处理,

  1. 将字符串转换为普通的 UTF-8 并将字节存储在缓冲区中。
  2. 将 2 字节的缓冲区长度(不是字符串长度)写成大端二进制格式。
  3. 写入整个缓冲区。

我在 PHP 中完成了此操作,而 Java 根本没有提示我的编码(至少在 Java 5 中)。

MUTF-8 主要用于 JNI 和其他以 null 结尾的字符串的系统。与普通 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))

关于Java 在 Python 中修改 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1393004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com