我正在通过Python与Java应用程序接口。我需要能够构造包含utf-8字符串的字节序列。Java在中使用了修改过的utf-8编码数据输入流.readUTF()python不支持(yet at least)
有人能告诉我在python中构造java修改的utf-8字符串的正确方向吗?在
更新1:要进一步了解java修改的utf-8,请在第550行here,或here in the Java SE docs上的DataInput接口查看readUTF方法。在
更新2:我正在尝试与第三方JBoss web应用程序接口,该应用程序使用这种修改过的utf8格式,通过调用POST请求读入字符串数据输入流.readUTF(对于任何关于普通javautf8字符串操作的混淆,很抱歉)。在
提前谢谢。在
您可以忽略修改过的UTF-8编码(MUTF-8),将其视为UTF-8。在Python方面,可以这样处理
我用PHP做过,Java根本没有抱怨我的编码(至少在java5中是这样)。在
MUTF-8主要用于JNI和其他具有空终止字符串的系统。与普通UTF-8的唯一区别是U+0000是如何编码的。普通UTF-8使用1字节编码(0x00),MUTF-8使用2字节(0xC0 0x80)。首先,您不应该在任何Unicode文本中使用U+0000(无效的代码点)。其次,
DataInputStream.readUTF()
不强制编码,所以它很乐意接受任何一种编码。在编辑:Python代码应该是这样的
我知道这个问题很古老,但我仍然想贡献自己的力量,因为我遇到了同样的问题并解决了它
我在openjdk源代码中找到了这个修改过的utf8的实现,并将其翻译成python。以下是我所创建的要点的一个link。在
好的,如果您需要阅读
DataInput.readUTF
的格式,我想您只需要将(有良好文档记录的)格式转换为Python。在看起来这并不难做。在读取了长度,然后读取了二进制数据本身之后,我建议您使用第一次传递来计算输出中将包含多少个Unicode字符,然后在第二次传递中相应地构造一个字符串。在不了解Python的情况下,我不知道如何有效地构造字符串的细节,但是考虑到链接规范,我无法想象这会非常困难。您可能需要将现有UTF-8解码器的源代码作为起点。在
相关问题 更多 >
编程相关推荐