Python2 和 Python3 中字符串类型有所不同,因此在字符串的处理上也存在差异,其中一个重要的区别是 Python2 中有两种类型的字符串: str
和 unicode
,而 Python3 则只有一种类型的字符串: str
。
在 Python2 中 str
类型代表的是字节串,而 unicode
类型代表的是 Unicode 字符串,两者不能直接进行运算。在转换时,可以通过 encode()
和 decode()
函数相互转换。其中 encode()
函数将 Unicode 字符串转为字节串,而 decode()
函数则将字节串转为 Unicode 字符串。
下面分别通过两个示例来详细解释这些转换过程。
示例1
在 Python2 中,如果我们需要向数据库中插入一个字符串,通常操作如下:
import MySQLdb
str1 = "我是字符串" # str1 是一个普通的字符串类型变量,值为“我是字符串”
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="test", charset="utf8")
cursor = db.cursor()
sql = "INSERT INTO `table` (`content`) VALUES (%s)"
cursor.execute(sql, str1) # 执行 SQL 语句
但是上述代码会抛出 TypeError 异常,提示传递的字符串类型不匹配。这是因为 MySQLdb
模块要求传递的字符串类型必须为字节串,而 str1
是一个 Unicode 字符串类型,不能直接传递,需要先将其转化为字节串类型。
我们可以使用 encode()
函数将 Unicode 字符串转化为字节串,然后再向数据中传递。示例代码如下:
import MySQLdb
str1 = "我是字符串" # str1 是一个普通的字符串类型变量,值为“我是字符串”
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="test", charset="utf8")
cursor = db.cursor()
sql = "INSERT INTO `table` (`content`) VALUES (%s)"
cursor.execute(sql, str1.encode('utf8')) # 执行 SQL 语句,并将字符串编码为 UTF-8 格式的字节串
示例2
在 Python3 中可以直接向 MySQLdb
传递 Unicode 字符串类型变量,不需要进行额外的转换。但是需要注意的是,Python3 中的字符串类型默认为 Unicode 字符串类型,因此如果我们想将某个字符串类型转化为字节串类型,需要使用 encode()
函数,而不能使用 str()
函数。
示例代码如下:
import pymysql
str1 = "我是字符串" # str1 是一个普通的字符串类型变量,值为“我是字符串”
db = pymysql.connect(host="localhost", user="root", passwd="", db="test", charset="utf8")
cursor = db.cursor()
sql = "INSERT INTO `table` (`content`) VALUES (%s)"
cursor.execute(sql, str1.encode('utf8')) # 执行 SQL 语句,并将字符串编码为 UTF-8 格式的字节串
综上所述,Python2 中存在两种字符串类型,在不同情况下需要进行转换;而 Python3 中只有一种字符串类型,默认为 Unicode 字符串类型,可以直接向 MySQLdb
等模块传递。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python2 中 unicode 和 str 之间的转换及与python3 str 的区别 - Python技术站