2022年 11月 5日

关于python3里gbk编码的问题解决

在python3有关字符串的处理当中,经常会遇到

‘gbk’ codec can’t encode character ‘\xa0’这个问题,原因是在str里面存在着不能正确编码的字符。

通过以下方法即可解决。

import requests
from bs4 import BeautifulSoup
url = “http://jecvay.com/2015/03/learning-compilers-1.html”
url = url.encode(‘gbk’,’ignore’).decode(‘utf-8’) //忽略
response = requests.get(url)
print(response)
soup = BeautifulSoup(response.text)

print(soup.body.text)

 

以上方法在必须要记录数据的时候会出现数据不准确问题

python3 字符串无法将 gbk 完全转换为utf8

对于必须存储的情况,将gbk -> 十六进制字节码文本 保存,需要的时候在转换为gbk以便显示。

  1. def string_hex(data):
  2. lin = ['%02X' % i for i in data]
  3. return "".join(lin).upper()
  4. def __ToUTF8(tuple):
  5. lists = []
  6. for itme in tuple:
  7. tmp = itme
  8. if type(itme) == bytes:
  9. try:
  10. tmp = itme.decode('gbk')
  11. except UnicodeDecodeError:
  12. tmp = string_hex(itme)
  13. lists.append(tmp)
  14. return lists
  1. def readFileAll(file):
  2. with open(file, 'rb') as f:
  3. data = f.read()
  4. return data
  1. s = readFileAll('gkb.txt') //gbk 字符串文件
  2. sx = string_hex(s)//转化为16进制文本
  3. print(sx)