Python3字符串的问题

前言

python字符串中遇到的一些问题

目录

  1. str和bytes类型的转换,encode与decode,以及字符串前的u,b,r
  2. 浏览器对含有中文的url进行转换
  3. 判断字符编码
  4. 遇到b’\xe3\xea’或者u’\xe3\xe2’这种类型的数据

正文

  1. str和bytes类型的转换,encode与decode,以及字符串前的u,b,r
    python3中,文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。
    decode将bytes解码为str类型
    encode将str编码为bytes类型
    bytes类型的数据在引号前有b,str数据在引号前可有u。字符串前有r代表原始字符,字面意思字符串中的转义字符不代表转义字符
a=u'dfs'
b=a.encode('utf8')
print(b)
print(b.decode('utf8'))
c=r'\n'
print(c)

输出:

b'dfs'
dfs
\n
  1. 浏览器对含有中文的url进行转换
    浏览器输入的url中的中文字符会根据它的编码被转换成%E5%AD的形式,不同的编码转换成的结果不同。比如在url中,中文“字符”,utf-8形式的会被转换成%E5%AD%97%E7%AC%A6,gbk编码形式的会被转换成%D7%D6%B7%FB。
from urllib.parse import quote
strings="字符"
GBKStrings=strings.encode("gbk")
UTF8Strings=strings.encode("utf8")
print(quote(strings))
print(quote(GBKStrings))
print(quote(UTF8Strings))

输出:

%E5%AD%97%E7%AC%A6
%D7%D6%B7%FB
%E5%AD%97%E7%AC%A6

这个问题在自己刚看爬虫的时候困扰了自己一下,使用网站自带的搜索时,它的url不是将utf-8的中文转化而是将gbk的中文转化的,导致自己不会拼接url

  1. 判断字符编码
import chardet
a=b'2018\xc4\xea4\xd4\xc29\xc8\xd5-\xb4\xab\xce\xc5\xba\xdc\xbe\xc3\xb5\xc4\xba\xec\xc9\xab\xb0\xe6 iPhone 8 \xba\xcd iPhone 8 Plus \xc0\xb4\xc1\xcb\xa1\xa3 \xc6\xbb\xb9\xfb\xb9\xd9\xcd\xf8\xd0\xfb\xb2\xbc: Apple \xbd\xf1\xc8\xd5\xd0\xfb\xb2\xbc\xcd\xc6\xb3\xf6\xd3\xb5\xd3\xd0\xd1\xa4\xc0\xf6\xba\xec\xc9\xab\xcd\xe2\xb9\xdb...\n'
response = chardet.detect(a)
print(response)
print(a.decode('gb2312'))

输出:

{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
2018年4月9日-传闻很久的红色版 iPhone 8 和 iPhone 8 Plus 来了。 苹果官网宣布: Apple 今日宣布推出拥有绚丽红色外观...

通过这种方式可以知道这种字符串应该转换成什么编码

  1. 遇到b’\xe3\xea’或者u’\xe3\xe2’这种类型的数据
    遇到数据变成b’\xe3\xe2’后encode才可能转成正常字符,可是怎么转换这种形式呢?

不要白费心思在这个串的基础上转换了,我遇到过几次发现都是在读取文件的时候出了问题,好好找找读取的原因吧,bytes类型没办法通过操作将\变成\,在这里\是转义符.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值