zoukankan      html  css  js  c++  java
  • python3 字符串转16进制unicode码

    笔者在折腾USB转GSM模块发中文短信的时候,PDU模式需要把字符串转成16进制unicode码。

    中文的好解决,encode unicode_escape编码就可以了

    # 需要把\u去掉才能用于USB转GSM模块发中文短信
    >>> '中'.encode('unicode_escape')
    b'\u4e2d'
    

    但英文和数字就麻烦了,encode没有变化

    >>> 'a'.encode('unicode_escape')
    b'a'
    

    最终找到用ord把字符串转成ascii/unicode数值, 然后用hex把数值转成16进制unicode码

    # 16进制unicode码长度大于4位的,需要去掉0x,等于4位的,需要把0x替换成00,才能用于USB转GSM模块发中文短信
    >>> hex(ord('中'))
    '0x4e2d' -> '4e2d'
    >>> hex(ord('a'))
    '0x61' -> '0061'
    >>> hex(ord('2'))
    '0x32' -> '0032'
    

    完美

    但还有一个问题就是读取短信的时候读到的也是16进制unicode码,这就脑壳疼了,不过我找到一个偷懒的方法,每4位组成一个16进制unicode码,前面加上u,eval一下就转成字符串了

    >>> eval('u0032')
    2
    >>> eval('u0061')
    'a'
    >>> eval('u4e2d')
    '中'
    

    完美

    注意事项: 字符串转16进制unicode码时必须一个字符一个字符地处理,而16进制unicode码转字符串时是4个字符组成一个16进制unicode码处理,不可混淆。

  • 相关阅读:
    Centos7 搭建FTP服务
    Mitmproxy 安装
    NET Reflector 8 使用
    web sevice 生成代理类及使用
    WCF 动态生成 不用增加引用两种方式
    oracle 表空间、用户名 相关语句
    恢复24小时之内删除的表及表数据
    pl/sql插入报错
    jquer ajax
    pdf增加水印
  • 原文地址:https://www.cnblogs.com/cooolr/p/11970776.html
Copyright © 2011-2022 走看看