第4章:文本和字节序列-了解编码问题

"""
常见编解码异常:
UnicodeEncodeError:编码错误,将字符串编码成字节串(二进制字节序列)时的异常;
UnicodeDecodeError:解码错误,将字节串(二进制字节序列)解码成字符串时的异常;
SyntaxError:如果源码的编码与预期不符,加载 Python 模块时还可能抛出 SyntaxError 异常;
"""

# 4.4.1 处理编码时 UnicodeEncodeError 异常:----------------
city = 'São Paulo'

# utf-? 能处理任何字符串
a = city.encode('utf8')
print(a)  # b'S\xc3\xa3o Paulo'

# UnicodeEncodeError,cp437 编码无法处理 ã 字符
# b = city.encode('cp437')

# 处理 UnicodeEncodeError 异常:---
# errors='ignore' 忽略无法处理的字符,强烈不推荐使用
b = city.encode('cp437', errors='ignore')
print(b)  # b'So Paulo'

# errors='replace' 替换无法处理的字符为 ? 号,推荐使用
b = city.encode('cp437', errors='replace')
print(b)  # b'S?o Paulo'

# errors='xmlcharrefreplace' 将无法编码的字符处理成 xml 实体
b = city.encode('cp437', errors='xmlcharrefreplace')
print(b)  # b'São Paulo''


# 4.4.2 处理解码时 UnicodeEncodeError 异常:---------------------------
octets = b'Montr\xe9al'
a = octets.decode('latin1')
print(a)  # 正常的解码

octets = b'Montr\xe9al'
b = octets.decode('iso8859_7')
print(b)  # Montrιal 有的编码器会解码成其他字符

# UnicodeDecodeError:urf8 碰到无法解码的字符会抛出异常
# c = octets.decode('utf8')

# 处理 UnicodeDecodeError 异常:---
c = octets.decode('utf8', errors='replace')
print(c)  # Montr�al,官方指定将 utf8 无法处理的字符替换为 � ,表示未知字符。


# 4.4.3 使用预期之外的编码加载模块时抛出的 SyntaxError:--------------------------------------
# Python3 默认使用 utf8 编码源码,python 在加载 utf8 之外的编码的源码时会抛出 SyntaxError;
# 解决办法就是在加载的文件顶部添加注释,例如:# code: cp1251


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值