加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:30:47 所属栏目:Java 来源:网络整理
导读:我通过 Python与Java应用程序连接.我需要能够构造包含utf-8字符串的字节序列. Java在DataInputStream.readUTF()中使用修改后的utf-8编码,python( yet at least)不支持 有人能指出我在python中构造java修改的utf-8字符串的正确方向吗? 更新#1:要了解有关jav
我通过 Python与Java应用程序连接.我需要能够构造包含utf-8字符串的字节序列. Java在DataInputStream.readUTF()中使用修改后的utf-8编码,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格式通过调用DataInputStream.readUTF来读取字符串中的字符串(对于普通java utf8字符串操作的任何混淆感到抱歉).

提前致谢.

解决方法

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

>将字符串转换为普通的UTF-8并将字节存储在缓冲区中.
>在big-endian中将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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读