Python字符集问题

本节介绍python的string的用法。string内部是用unsigned int来存储字符串。

Py_UCS4 unsigned int

所以python的字符串的存储空间是比较大的,现在python中的字符串统一使用utf来存储

与python有关的字符集

  • python源码字符集 :utf 用ASCII码编译python可能会报错.
  • ASCII字符集 GBK(2个ASCII码来存储一个汉字) GB2312 GBK和GB2312还是用ASCII码来存储其他文字
  • UTF-8 UTF-16 UTF-32(UCS4) python注重简洁,所以内部全部使用UTF-32来存储
总结:python的源码用的是utf-8,但是其内部的存储用的是utf-32

Python字符串操作

访问

str1 = "测试字符串001"
print(str1)
print(id(str1)) # 输出 2115250249600

str1 = "测试字符串002"
print(id(str1)) # 输出 2115250898064

由于python采用utf-32存储,所以不管是汉字还是英文数字等,在用下标进行访问时占位都只占1位

print(str1[2]) // 输出 "字"
print(str1[5]) // 输出 "0"

切片

下面的访问方式是python中特有的

# 3为开始位置,5为结束位置尾后位置
print(str1[3:5]) # 输出 "符串"
# 负数从结尾开始
print(str1[-3:-1]) # 00
#从倒数第3个取到第1个
print(str1[:-2]) # 测试字符串0

字符串转义

如果一个字符串里面有很多转义,只用在字符串开始加一个rR,转义为普通字符串

print(r"dd\tdd\t") # 输出 dd\tdd\t

字符串拼接

多行字符串拼接的3种方式

a = "111" \
    "222" \
    "333"
print(a) # 输出111222333

a = "111 \
    222 \
    333"
print(a) # 输出111     222     333

a = """
    aaa
    bbb
    ccc
    """
print(a)
"""
    输出
    aaa
    bbb
    ccc
    """

字符串的拼接还可以直接对两个字符串使用+运算符:s1+s2 注意如果s1和s2较大,拼接操作会有较大时间开销,因为python相当于执行拷贝操作新生成一个字符串对象

对整型进行拼接

str(123)+str(100.9)

格式化字符串

  • %s 字符串
  • %d 整数
  • %c 字符 python里面没有char类型,可以通过chr()进行转化
  • %f 浮点数
    s4 = "格式化字符串 %s %d %c %f" % ("test",300,chr(66), 10.9 )
    print(s4) # 输出 格式化字符串 test 300 B 10.900000
    

字符串长度

注意字符串不是内部存储的长度,而是整个的字数(汉字和英文都是记为1个数)

© liangqi all right reserved,powered by Gitbook文件修订时间: 2019-06-04

results matching ""

    No results matching ""