跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 Python 如何处理 json 数据转义的问题
未分類
26 8 月 2020

关于 Python 如何处理 json 数据转义的问题

关于 Python 如何处理 json 数据转义的问题

資深大佬 : N0phone 9

def tamper(payload,**kwargs): line = payload.encode(‘hex’) n=2 groups = [line[i:i+n] for i in range(0,len(line),n)] full = ” for x in groups: full = full + ‘u00’ +x retVal = full return retVal

我有一段 python 程序,运行环境是 linux,python2 想要把我的数据 转成u00xx 这样的 json 能解析的数据然后发包请求,但是在实际过程中出现报错

‘unicodeescape’ codec can’t decode bytes in position 0-3: truncated uXXXX escape 然后我将 ‘u00’更改为 r’u00’之后报另一个错误 LookupError: ‘hex’ is not a text encoding; use codecs.encode() to handle arbitrary codecs’” 应该怎么解决有表哥吗

大佬有話說 (13)

  • 資深大佬 : imn1

    x 是个整数吧?
    字符串+整数 不对

  • 主 資深大佬 : N0phone

    @imn1 是个 HEX 编码完的十六进制数啊, 我怎么修改主题啊 这个排版怎么这样

  • 資深大佬 : TEwrc

    有一说一这排版不想看。。。

  • 資深大佬 : imn1

    试试 str(x)
    我不太熟 py2 的编码机制

    如果按 py3 的理解,这个程序就是错的,lines 是字节串,x 也就是 line[i:i+2] 是双字节
    双字节前面加 u00,这个逻辑完全没理解

    如果 payload 本身就是 str 的话,用 json 模块直接转 json 串好像更简单

  • 主 資深大佬 : N0phone

    @TEwrc 我发帖的时候是换行的 好奇怪 怎么修改主题内容啊没找到。。

  • 主 資深大佬 : N0phone

    @imn1 逻辑就是 字符串先 hex 编码 然后每两个字节取一个 组合再前面加上u00 构成u00xx 这样能被 json decode 的形式

  • 資深大佬 : imn1

    unicode 没有 6 位编码,且 00 开头的字符
    只有 u0000-u00ff
    u001234 是错误的,u1234 才是正确的

  • 主 資深大佬 : N0phone

    @imn1 对的按照我的逻辑每次取两个字节不是应该只有u00xx 吗

  • 資深大佬 : imn1

    算了,我也不了解 py2,可能你的程序也没大问题( py3 第一句就不行了)
    我建议是如果 payload 是字符串的话,转成 utf-8,然后 json.dumps 就足够了

  • 資深大佬 : imn1

    @N0phone #8
    一个字节是 xx,两个字节是 xxxx

  • 資深大佬 : sudoy

    我可能不知道怎么帮助你,但是建议主下次发帖的时候,在代码前后加 “`, 就是那个跟波浪号~在同一个建的符号,这样别人帮你看代码的时候看得比较清楚

  • 資深大佬 : myxingkong

    ![Test](//imgur.com/mvRtsY8)

  • 資深大佬 : fasionchan

    我猜你的 payload 是一个字节序列,它可能是 utf8 或者 gbk 编码的,它的 base16 编码并不是合法的 unicode 呀……
    这没理解文本编码的结果,不如先看看文本编码是怎么回事: https://python.fasionchan.com/zh_CN/latest/practices/coding.html

    为什么要自己拼接呢?按我的理解,你把数据解码成 unicode 字符串,然后调 repr 或 json.dumps 不就可以得到uxxxx 这种形式了吗?

    “`
    >>> data = ‘我们’
    >>> data
    ‘xe6x88x91xe4xbbxac’
    >>> data.decode(‘utf8’)
    u’u6211u4eec’
    >>> repr(data.decode(‘utf8’))[2:-1]
    ‘\u6211\u4eec’
    >>> json.dumps(data.decode(‘utf8’))[1:-1]
    ‘\u6211\u4eec’
    “`

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具