前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于 Python3 的编码

关于 Python3 的编码

作者头像
py3study
修改2023-09-20 19:22:55
1.6K0
修改2023-09-20 19:22:55
举报
文章被收录于专栏:python3python3
wKiom1mIEXfReh9TAAA5ATqexB8639.png
wKiom1mIEXfReh9TAAA5ATqexB8639.png
  • 字符与 Unicode 编号之间的转换
代码语言:javascript
复制
# 字符转 Unicode 编号
>>> ord('A')
65
>>> hex(ord('A'))
'0x41'

>>> ord('你')
20320
>>> hex(ord('你'))
'0x4f60'

>>> '你好'.encode('unicode_escape')
b'\\u4f60\\u597d'

# Unicode 编号转字符
>>> chr(65)
'A'
>>> chr(0x41)
'A'

>>> chr(20320)
'你'
>>> chr(0x4f60)
'你'

>>> b'\\u4f60\\u597d'.decode(('unicode_escape'))
'你好'
>>> print(b'\\u4f60\\u597d')
b'\\u4f60\\u597d'
>>> print(u'\u4f60\u597d')
你好
  • 汉字与 gbk 十六进制(二进制)之间的转换。
代码语言:javascript
复制
# 汉字转十六进制
>>> '你好'.encode('gbk')
b'\xc4\xe3\xba\xc3'

# 十六进制转汉字
>>> b'\xc4\xe3\xba\xc3'.decode('gbk')
'你好'

# 汉字转十六进制字符串
>>> ''.join( [ '%02X' % x for x in '你好'.encode('gbk') ] ).strip()
'C4E3BAC3'
>>> ' '.join( [ '%02X' % x for x in '你好'.encode('gbk') ] ).strip()
'C4 E3 BA C3'

# 十六进制字符串转汉字
>>> bytes.fromhex('C4E3BAC3').decode('gbk')
'你好'
>>> bytes.fromhex('C4 E3 BA C3').decode('gbk')
'你好'
  • 数字与十六进制(二进制)之间的转换
代码语言:javascript
复制
# 数字转十六进制字符串
>>> hex(21)
'0x15'
>>> hex(21)[2:]
'15'

# 十六进制字符串转数字
>>> int('0x15', 16)
21
>>> int('15', 16)
21

# 数字转八进制字符串
>>> oct(21)
'0o25'
>>> oct(21)[2:]
'25'

# 八进制字符串转数字
>>> int('0o25', 8)
21
>>> int('25', 8)
21

# 数字转二进制字符串
>>> bin(5)
'0b101'
>>> bin(5)[2:]
'101'

# 二进制字符串转数字
>>> int('0b101', 2)
5

>>> int('101', 2)
5
  • bytes 相关
代码语言:javascript
复制
# bytes 对象转十六进制字符串
>>> "%02X" % ord(b'\xff')
'FF'
>>>  ''.join(["%02X" % i for i in b'\xe4\xbd\xa0\xe5\xa5\xbd'])
'E4BDA0E5A5BD'

# bytes 转 int
>>> ord(b'\xff')
255

# int 转 bytes
>>> bytes([255])
b'\xff'
  • bit 相关(需使用第三方包 bitarray
代码语言:javascript
复制
# 字符串转 01 串(默认 endian 是大端)
>>> arr = bitarray()
>>> arr.frombytes('你好'.encode('utf8'))
>>> arr.to01()
'111001001011110110100000111001011010010110111101'

# 01 串转字符串
>>> bitarray('111001001011110110100000111001011010010110111101').tobytes().decode('utf8')
'你好'
  • 关于utf8的bom头。(Python3下)
代码语言:javascript
复制
>>> import codecs
>>> codecs.BOM_UTF8
b'\xef\xbb\xbf'
>>> len(b'\xef\xbb\xbf')
3
>>> codecs.BOM_UTF8.decode('utf8')
'\ufeff'
>>> len('\ufeff')
1
代码语言:javascript
复制
>>> from encodings.aliases import aliases
>>> for k in aliases:
	print('%s: %s' % (k, aliases[k]))
  • 验证是不是有效编码。
代码语言:javascript
复制
>>> import codecs

>>> codecs.lookup('utf8')    #有效
<codecs.CodecInfo object for encoding utf-8 at 0x13fb4f50828>

>>> codecs.lookup('utf-;8')    #有效
<codecs.CodecInfo object for encoding utf-8 at 0x13fb4f50a08>

>>> codecs.lookup('utf88')    #无效
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    codecs.lookup('utf88')
LookupError: unknown encoding: utf88
  • 标准化 encoding。
代码语言:javascript
复制
>>> import encodings
>>> encodings.normalize_encoding('utf-;8')
'utf_8'

对应 C 代码为:unicodeobject.c 中的 _Py_normalize_encoding 函数。

代码语言:javascript
复制
import sys
import locale
 
# 当前系统所使用的默认字符编码
>>> sys.getdefaultencoding()
'utf-8'
 
# 用于转换 Unicode 文件名至系统文件名所使用的编码
>>> sys.getfilesystemencoding()
'utf-8'
 
# 获取默认的区域设置并返回元组(语言, 编码)
>>> locale.getdefaultlocale()
('zh_CN', 'cp936')
 
# 返回用户设定的文本数据编码
# 文档提到this function only returns a guess
>>> locale.getpreferredencoding()
'cp936'
  • 字符串反转
代码语言:javascript
复制
>>> line = '0123456789'
>>> line[::-1]
'9876543210'

【相关阅读】

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档