gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:39:56 28 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 的更多信息,请查看 DataInput 接口(interface)第 550 行 here 中的 readUTF() 方法。 ,或here in the Java SE docs .

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

最佳答案

您可以忽略修改的 UTF-8 编码 (MUTF-8),并将其视为 UTF-8。在Python方面,你可以这样处理,

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

我已经在 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))

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

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