首页 > 编程语言 > 详细

Python字符集相关

时间:2020-06-10 18:51:11      阅读:48      评论:0      收藏:0      [点我收藏+]

Python中的字符编码

  • python2默认的字符编码不支持中文,需要在模块首行位置手动指定编码(如:coding:utf-8)
  • python3默认的字符编码支持中文,可以不用手动指定编码,建议还是加上

字符集的历史(简要概括)

  • ASCII(初始使用的字符编码,127个字符长度)
  • GBK(中国自己的一套字符编码)
  • UNICODE(国际统一编码)
  • UTF-8(支持存储国际及地方字符的字符编码)
  • UTF-16
  • ...

  注:大类型的字符集可能包含了小类型字符集的内容,小类型的字符集中不一定就有大类型字符集中的内容

代码示例

def func_charset1():
    """
    字符编码相关的方法使用
    :return:
    """
    print(ord("a"))     # 97
    print(chr(97))      # a

if __name__ == "__main__":
    func_charset1()

Python中的字节与字符串

  • 定义字节类型(以b开头,ASCII编码以内的字符):var1 = b"ABC"
  • 定义字符串:var2 = "ABC"

python中的编码与解码

  • 编码: str.encode("字符集"),将指定的字符串通过指定的字符集转成二进制字符串
  • 解码:bstr.decode("字符集"),将指定的二进制字符串通过指定的字符集转换成字符串
  • 使用指定的字符集编码,解码也要用相同的字符集,避免报错

代码示例

def func_charset2():
    """
    python中的字符与字节定义,字节字符串是ASCII字符集内的字符组成
    :return:
    """
    var1 = b"ABC"
    var2 = "ABC"

    print(f"{var1} - {type(var1)}")     # b‘ABC‘ - <class ‘bytes‘>
    print(f"{var2} - {type(var2)}")     # ABC - <class ‘str‘>

def func_charset3():
    """
    python中的编码与解码(保证字符集一致)
    :return:
    """
    print("中国,加油".encode("UTF8"))   # b‘\xe4\xb8\xad\xe5\x9b\xbd,\xe5\x8a\xa0\xe6\xb2\xb9‘
    print(b\xe4\xb8\xad\xe5\x9b\xbd,\xe5\x8a\xa0\xe6\xb2\xb9.decode("UTF8"))  # 中国,加油

if __name__ == "__main__":
    func_charset2()
    func_charset3()

 Python使用字节、字符读写文件

  • 1.写入文件时指定了字符编码,读取文件时也需要指定相同的字符集
  • 2.写入文件内容使用的是二进制字符,不用指定字符集,读取的时候同样的也不用指定字符集
  • 3.不管以什么字符集写入到文件中,读取出来的数据到python解释器后,都会被python解释器视为同类型的字符集(个人理解)
    • ①.假设python解析器是utf8字符集
    • ②.读取出gbk字符集内容到python解释器后,被转变成utf8字符集
    • ③.读取出utf8字符集内容到python解释器后,被转变成utf8字符集
    • ④.此时读取的是不同类型的字符集数据,得到了相同字符集类型的数据,二者数据就可以进行拼接

代码示例

str = ""
def func_write_file_gbk():
    """
    将指定的字符串按照指定的字符集(GBK)写入到指定的文件中
    :return:
    """
    with open(file="./a.txt",mode="w",encoding="gbk") as f:
        f.write("风萧萧兮易水寒")

def fun_read_file_gbk():
    """
    从指定的文件中以指定的字符集(GBK)读取文件内容
    :return:
    """
    # 函数内部修改全局变量的值之后,该变量会被视为局部变量,使用global标识全局变量
    global str
    with open(file="./a.txt",mode="r",encoding="gbk") as f:
        str += f.read()
        print(str)

def func_write_utf8():
    """
    将指定的字符串按照指定的字符集(utf8)写入到指定的文件中
    :return:
    """
    with open(file="./a1.txt",mode="w",encoding="utf8") as f:
        f.write("壮士一去不复返!")

def fun_read_file_utf8():
    """
    从指定的文件中以指定的字符集(utf8)读取文件内容
    :return:
    """
    # 函数内部修改全局变量的值之后,该变量会被视为局部变量,使用global标识全局变量
    global str
    with open(file="./a1.txt",mode="r",encoding="utf8") as f:
        str += f.read()
        print(str)

if __name__ == "__main__":
    # 先写再读
    func_write_file_gbk()   # 以gbk字符集写入内容到文件中
    fun_read_file_gbk()     # 以gbk字符集读取内容:风萧萧兮易水寒

    func_write_utf8()       # 以utf8字符集写入内容到文件中
    fun_read_file_utf8()    # 以utf8字符集读取文件中的内容

    print(str)  # 读取不同类型的字符集数据得到相同类型的字符集数据进行拼接:风萧萧兮易水寒壮士一去不复返!

 Python使用二级制数据读写文件

  • 使用二进制读写文件,不需要指定字符编码
  • 使用二进制将内容写入到文件之后,文件中保存不是二进制代码,而是二进制对应的解码内容
  • 使用二进制将内容从文件中读取出来,读取出来的问文件中内容对应的二进制编码内容

代码示例

def func_write_binary():
    """
    写入二进制数据到指定的文件中
    :return:
    """
    with open(file="./b.txt", mode="wb") as f:
        f.write(b\xe4\xbd\xa0\xe5\xa5\xbd,\xe4\xb8\xad\xe5\x9b\xbd\xef\xbc\x81)

def func_read_binary():
    """
    以二进制方式读取文件内容,读取出来的是二进制数据
    :return:
    """
    with open(file="./b.txt",mode="rb") as f:
        print(f.read())

if __name__ == "__main__":
    print("你好,中国!".encode("UTF8"))  # b‘\xe4\xbd\xa0\xe5\xa5\xbd,\xe4\xb8\xad\xe5\x9b\xbd\xef\xbc\x81‘

    # 先写再读
    func_write_binary()     # 将二进制内容写入文件,文件的内容:“你好,中国!”
    func_read_binary()      # 将文件中的内容以二进制方式读出:b‘\xe4\xbd\xa0\xe5\xa5\xbd,\xe4\xb8\xad\xe5\x9b\xbd\xef\xbc\x81‘

 

Python字符集相关

原文:https://www.cnblogs.com/jason2018524/p/13086913.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!