python3.x中bytes与字符串详

发布时间:2019-08-21 07:50:57编辑:auto阅读(1499)

    原文地址:http://www.crifan.com/summary_python_string_encoding_decoding_difference_and_comparation_python_2_x_str_unicode_vs_python_3_x_bytes_str/

    python3.x bytes: 

    某种编码(UTF-8,GBK等)类型的字节序列

    普通字符串加上字母b作为前缀,就是表示bytes字符串了。

    需要注意的是:

    • bytes,都是某种特定的编码的字符串
    • bytes,如果写上对应的值的话,那么只能直接写ASCII字符串,即只能写英文单词这种
    • 而如果想要写中文汉字这种,需要写\xYY这种16进制的值的形式才可以

      • 其中\xYY的值到底是多少,是你自己去通过相应的办法,将其编码为特定类型的字符所获得的
      • 其中如何把字符串,转换为某种编码的bytes的值,可以参考下面的"str->bytes"中的代码
      • 一般来说,我们在实际编程中,所遇到的是,你自己需要知道当前获得的字符串变量,是bytes,并且知道其是什么编码,基本上就可以了,然后就可以用后面介绍的bytesVariable.decode("specificEncoding")去解码为你需要的Unicode的str字符串了

    bytes->str:
    【核心代码逻辑】
    1.如果你要写对应的bytes变量,那么需要加上前缀字母b;

    注意:
    不过要注意的是,只能写英文单词,而不能直接写中文等非ASCII的字符。
    如果非要写非ASCII字符,那么只能自己想办法先将其转化为对应某种编码的byte,内部存储的内容,是对应的各个字节,打印出来的效果就是\xYY这种十六进制的值。

    其中:
    如果把对应的中文转换对特定编码的bytes的16进制值,可以参考下面的"str->bytes"的代码。
    2.然后用
    bytesVariable.decode("specificEncoding")
    去解码为对应的str(即Unicode字符串)
    其中:specificEncoding是该bytes的编码。

    3.然后你就可以拿着Unicode的str,去做你想要的事情了
    比如常见的打印出来看看。

    【完整代码】
    参见下面的:python_3.x_bytes_to_str.py

     

    python3.x  str:Unicode类型的字符串

    Python 3.x中,直接输出的字符串(被单引号或双引号括起来的),就已经是Unicode类型的str了。

    当然,有一些前提:

    • Python文件开始已经声明对应的编码
    • Python文件本身的确是使用该编码保存的
    • 两者的编码类型要一样(比如都是UTF-8或者都是GBK等)

    这样Python解析器,才能正确的把你所输出字符串,解析为对应的unicode的str

    str->bytes:
    【核心代码逻辑】
    1.默认写出的字符串,已经就是str,即Unicode,的类型了。
    或者你之前已经获得了对应的unicode的str了。

    注:当然,如果在Python文件中,需要满足下列条件:
    A。Python文件开始已经声明对应的编码
    B。Python文件本身的确是使用该编码保存的
    C。两者的编码类型要一样(比如都是UTF-8或者都是GBK等)

    2.然后调用
    unicodeStr.encode("encodingType")
    去编码为对应的字节序列bytes,
    3.然后后续再进行相应的你所需要的处理

    【完整代码】
    参见下面的:python_3.x_str_to_bytes.py

     

     

关键字