zoukankan      html  css  js  c++  java
  • 关于python字符串编码问题

    关于python字符串编码问题

    一,encode和decode

    • 1,python默认字符串是使用Unicode编码。

    • 2,encode作用是将Unicode编码转换成其他编码的字符串。

    • 3,decode是将其他编码的字符串解码为Unicode编码。

    • 4,实例

      unicode_str = "我们是unicode编码"
      print(type(unicode_str))
      # unicode_str进行编码为utf-8编码
      utf8_str = unicode_str.encode("utf-8")
      print(type(utf8_str))
      # 一个Unicode字符被转换为3个UTF-8编码的bytes对象
      print(utf8_str)
      # 进行解码为Unicode码
      unicode_end_str = utf8_str.decode("utf-8")
      print(type(unicode_end_str))
      print(unicode_end_str)
      
    • 结果如下:

      <class 'str'>
      <class 'bytes'>
      b'xe6x88x91xe4xbbxacxe6x98xafunicodexe7xbcx96xe7xa0x81'
      <class 'str'>
      我们是unicode编码
      
    • 注意:Unicode编码在python中不能再进行解码。而除了Unicode编码不能继续编码,也就是说,如果你已经将Unicode转换为utf-8编码,则不能继续使用encode编码

    二,关于不同编码之间的转换

    • 1,上面说过,不能连续编码,所以不同编码之间的转换只能先将其他编码解码为Unicode编码,然后再编码为其他编码

    • 2,实例,将utf-8编码转换为gbk编码

      unicode_str = "我"
      
      # 先获取utf-8编码的字符串
      # 编码为utf-8编码
      utf8_str = unicode_str.encode("utf-8")
      print("我是utf_str:", utf8_str, "type:", type(utf8_str))
      # 解码为Unicode
      unicode_str = utf8_str.decode("utf-8")
      print("我是unicode_str:", unicode_str, "type:", type(unicode_str))
      # 将uncoide编码为gbk
      gbk_str = unicode_str.encode("gbk")
      print("我是gbk_str:", gbk_str, "type:", type(gbk_str))
      # 这样
      # 就完成了不同编码的转换
      
    • 结果:

      我是utf_str: b'xe6x88x91' type: <class 'bytes'>
      我是unicode_str:type: <class 'str'>
      我是gbk_str: b'xcexd2' type: <class 'bytes'>
      

    三,当一个字符串中既有中文又有英文时,有些编码会出错,比如assic编码

    • 实例:

      str = "我是Unicode编码"
      assic_str = str.encode("ASCII")
      
    • 当我们尝试给中文使用ascii编码时会报错

      Traceback (most recent call last):
        File "C:/Users/26398/Desktop/python/爬虫/存储/strdemo3.py", line 2, in <module>
          assic_str = str.encode("ASCII")
      UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
      
      
    • 在爬虫处理中,也会出现混合编码的情况,处理方式是进行错误处理

      str = "我是Unicode编码"
      """
      默认为strict: 非法字符抛出异常
      ignore: 忽略非法字符,不进行转换
      replace: 使用?进行替换非法字符
      xmlcharrefreplace:使用xml字符引用替代非法字符
      
      """
      assic_str = str.encode("ASCII", errors='ignore')
      print(assic_str)
      assic_str = str.encode("ASCII", errors='replace')
      print(assic_str)
      assic_str = str.encode("ASCII", errors='xmlcharrefreplace')
      print(assic_str)
      
      

      结果:

      b'Unicode'
      b'??Unicode??'
      b'&#25105;&#26159;Unicode&#32534;&#30721;'
      
  • 相关阅读:
    遍历frame中的表单:
    java分页算法
    将oracle数据库表使用命令的形式导入到excle文件中 亲测可用!
    关于解决java读取excel文件遇空行抛空指针的问题 !
    对Excle的行和列进行检查 单元格类型转换代码 ;
    java读取xls和xlsx数据作为数据驱动来用
    关于java读取excle文件的相关方法 ;
    转 Maven常用仓库地址以及手动添加jar包到仓库
    Luogo P2324 [SCOI2005]骑士精神
    Luogu P2483 【模板】k短路([SDOI2010]魔法猪学院)
  • 原文地址:https://www.cnblogs.com/jlxa162hhf/p/14161233.html
Copyright © 2011-2022 走看看