Python查看unicode编码表(Python 字符集编码 - UTF-8 编码)

2023-12-31 20:50:02 :93

python查看unicode编码表(Python 字符集编码 - UTF-8 编码)

各位老铁们,大家好,今天由我来为大家分享python查看unicode编码表,以及Python 字符集编码 - UTF-8 编码的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

本文目录

Python 字符集编码 - UTF-8 编码

Unicode 的编码范围为 0~0x10FFFF ,如此大的范围,显然没办法像 ASCII 编码一样使用一个字节存储。为此,Unicode 制定了各种储存编码的方式,如: UTF-8 、 UTF-16 和 UTF-32 ,这些存储格式被称为 Unicode 转换格式 UTF 。

每种 Unicode 转换格式都会把一个编码存储为一到多个编码单元,如 UTF-8 的编码单元为 8 位的字节; UTF-16 的编码单元为 16 位,即 2 个字节; UTF-32 的编码单元为 32 位,即 4 个字节。

其中, UTF-8 是在互联网上使用最广泛的一种 Unicode 转换格式,具有以下显著的优势。下面,我们就先来看看 UTF-8 具有哪些有点吧~

1. UTF-8 中每个 ASCII 字符只需要一个字节去存储,因此一个 ASCII 文本本身也是一个 UTF-8 文本,即做到了向后兼容。

比如 A 的 ASCII 码对应为 0x41 , a 的 ASCII 码对应为 0x61 ,那么 UTF-8 兼容 ASCII 也就意味着:

这里,需要再次提醒一下:Unicode 是表现形式,UTF-8 是存储形式;即 UTF-8 解码之后为 Unicode ,Unicode 可以编码成 UTF-8 。

2. UTF-8 采用字节为存储单元,因此不存在字节的大端和小段的问题。

UTF-16 和 UTF-32 的存储单元分别是 2 字节和 4 字节,因此在存储时会涉及到大小端的问题。那什么是大小端模式呢?下面我们来暂停补充一下~

关于如何获知你的环境使用的是大端模式还是小端模式,这里有个简单的方式:定义一个 short 类型的数组即可:

数字 1 在 short 类型中表示为 0x0001 ,高位为 0x00 ,低位为 0x01 。我们可以很直观地看到,数组在保存数据时,将高位 0x00 放在了高地址处,将低位 0x01 放在了低地址处。因此使用的就是小端模式。

那 UTF-8 为什么可以使用字节来作为存储单元,而不用担心字节序的问题呢?这就涉及到了 UTF-8 巧妙的编码规则~

UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8的编码规则很简单,只有二条:

1)对于单字节符号,字节的第一位设为 0 ,后 7 位为这个符号的 Unicode 码。也就是我们上文提到的向后兼容:对于英文字母,UTF-8 编码和 ASCII 码是相同的。

2)对于使用 X 个字节存储的符号,第一个字节的前 X 位设置为 1 ,第 X+1 位设置为 0 ,后面字节的前 2 位一律设置为 10 ,剩下的位置一次填充这个符号的 Unicode 码。

下表总结了编码规则,字母 x 表示可用于编码的位:

跟据上表,解读 UTF-8 编码也非常简单:如果一个字节的第一位是 0 ,则这个字节单独就是一个字符;如果第一位是 1 ,则连续有多少个 1 ,就表示当前字符占用多少个字节。

下面,我们就来演示一下 UTF-8 编码的过程。

首先,获取汉字 鱼 的 Unicode 码:

我们不妨先对 鱼 这个汉字使用 utf-8 编码看看使用几个字节存储:

鱼 在 UTF-8 编码中使用 3 个字节存储,因此其存储的二进制的形式为 1110xxxx 10xxxxxx 10xxxxxx ,将 Unicode 1001 110001 111100 依次填充到占位符 x 的位置就得到: 11101001 10110001 10111100 。

下面,我们将上述推导得出的 11101001 10110001 10111100 转换为十六进制,验证一下是否为 b’\xe9\xb1\xbc’ :

验证无误!

python3 pickle中怎么使用unicode编码

Python特有编码Python还内置一些特有的编码集。4.2.4.1 文本编码Python提供了下面从字符串到字节数组的编码,以及字节数据到字符串的解码:Codec Aliases PurposeidnaImplements RFC 3490, see also encodings.idna. Only errors=’strict’ is supported.mbcs dbcs Windows only: Encode operand according to the ANSI codepage (CP_ACP)palmosEncoding of PalmOS 3.5punycodeImplements RFC 3492. Stateful codecs are not supported.raw_unicode_escapeLatin-1 encoding with \uXXXX and \UXXXXXXXX for other code points. Existing backslashes are not escaped in any way. It is used in the Python pickle protocol.undefinedRaise an exception for all conversions, even empty strings. The error handler is ignored.unicode_escapeEncoding suitable as the contents of a Unicode literal in ASCII-encoded Python source code, except that quotes are not escaped. Decodes from Latin-1 source code. Beware that Python source code actually uses UTF-8 by default.unicode_internalReturn the internal representation of the operand. Stateful codecs are not supported.Deprecated since version 3.3: This representation is obsoleted by PEP 3934.2.4.2 二进制编码转换Python提供下面的二进制编码转换:字节对象到字节对象映射转换,不支持使用bytes.decode()。Codec Aliases Purpose Encoder / decoderbase64_codec base64, base_64 Convert operand to MIME base64 (the result always includes a trailing ’\n’)Changed in version 3.4: accepts any bytes-like object as input for encoding and decoding base64.b64encode() / base64.b64decode()bz2_codec bz2 Compress the operand using bz2 bz2.compress() / bz2.decompress()hex_codec hex Convert operand to hexadecimal representation, with two digits per byte base64.b16encode() / base64.b16decode()quopri_codec quopri, quotedprintable, quoted_printable Convert operand to MIME quoted printable quopri.encodestring() / quopri.decodestring()uu_codec uu Convert the operand using uuencode uu.encode() / uu.decode()zlib_codec zip, zlib Compress the operand using gzip zlib.compress() / zlib.decompress()4.2.4.3 文本编码转换下面编解码器支持字符串到字符串的转换:Codec Aliases Purposerot_13 rot13 Returns the Caesar-cypher encryption of the operand4.2.5 encodings.idna--国际化域名的应用本模块实现了RFC 3490(Internationalized Domain Names in Applications)和RFC 3492(Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN) 的功能。它实现的功能建立在punycode编码和stringprep模块之上。这两个RFC定义了非ASCII字符表示域名的规范。如果一个域名含有非ASCII字符,需要把它转换为ASCII兼容编码的域名(ACE),因为有一些网络协议不支持非ASCII字符的域名,比如DNS查询、HTTP主机等等。因此这些转换工作可以人工转换,也可以是程序转换。在程序里转换,需要把UNICODE的域名转换为ACE兼容的域名之后,才能进行处理,当要给用户显示时需要从ACE反向转换为UNICODE域名。 ***隐藏网址*** 当从网络收到的域名,它是不会自动转换为 UNICODE域名的,需要应用程序进行转换之后,才能以UNICODE域名显示给用户。 模块encodings.idna也实现nameprep的处理,它能实现主机名称的标准化处理,域名的大小写统一化,如果需要这些功能是可以直接使用。 encodings.idna.nameprep(label) 返回label的国际化标志名称。 encodings.idna.ToASCII(label)转换label为ASCII表示,符合标准RFC 3490。 encodings.idna.ToUnicode(label) 转换label为UNICODE表示,符合标准RFC 3490.4.2.6 encodings.mbcs--Windows的ANSI编码本模块实现从ANSI(CP_ACP)代码进行编码的功能。仅在Windows系统上可用。 4.2.7 encodings.utf_8_sig-UTF-8带BOM标记的codec编码本模块实现UTF-8的编码和解码:把带有BOM的UTF-8编码转换为不带BOM的UTF-8编码。当在生成BOM时,只在第一次时生成;当在解码时跳过相应的BOM标记字节,再进行解码。

如何使用python 打开unicode的文件

Python核心库的open函数是按照ascii设计的。但是,现在我们越来越多地要面对Unicode文件。好在python提供了codecs模块,帮我们解决了这个问题。codecs模块的open定义如下open( filename, mode) Open an encoded file using the given mode and return a wrapped version providing transparent encoding/decoding.其中前两个参数filename和mode和默认的open相同。第三个参数encoding是关键,制定了文件的编码方式。对于常用的Unicode有这几种utf_16、utf_16_le、utf_16_be、utf_8,每一种还有一些可用的别名,具体可以查找python manual。utf_16、utf_16_le、utf_16_be参数的区别是这样的。如果指定了utf_16,python会检查文件的BOM(Byte Order Mark)来判断,文件类型到底是utf_16_le、utf_16_be。对于没有BOM的文件会报错。如果我们直接指定了utf_16_le、utf_16_be,python就不检查BOM了。对于没有BOM的文件很好用。但是,对于有BOM的文件就要注意,它会把BOM当作第一个字符读入。

如何辨认python的编码格式是unicode

Python文件里开头有coding:utf-8,则说明这个Python文件是Unicode编码。在Python3中字符串是默认使用Unicode的,python2.x则得用u来表示它是Unicode字符串,如a=u“abcdefg”。type函数可以验证

python中的u和unicode编码问题!!!!

# -*- coding: gbk -*-import sysreload(sys)print sys.getdefaultencoding()print u’中文’print unicode(’中文’,’gbk’)

你运行下这个程序,就能看出来,python2默认是ascii,虽然你文件使用的gbk,但是不会影响默认编码。

print u’中文’,这个是直接定义一个unicode字符串。

unicode(’中文’)这个是生成unicode对象,解释器会对内容使用默认编码进行解码,转换成unicode,默认的是ascii,所以报错,你指定gbk就可以了。

如果解决了您的问题请采纳!如果未解决请继续追问

python怎么知道一个字符串的编码方式

字符串的编码,有很多种如utf-8,gb2312,gbk,gb18030,bz2,zlib,big5,bzse64

python 对编码的处理有两个方法,decode()和 encode()方法

a = ’你好’b = ’python’print a.decode(’utf-8’).encode(’gbk’)##decode方法把字符串转换为unicode对象,然后通过encode方法转换为指定的编码字符串对象print b.decode(’utf-8’)##decode方法把字符串转换为unicode对象

所以要让python(或者说机器)来识别字符串的编码,是一件很困难的事。编码就是汉字和整数之间的对应,同一个整数,可以在不同的编码中,都有对应的汉字。比如下面的例子,比特流’\xe6\xb0\xb4\xe5\xa3\xb6’在四种编码中都有对应的汉字,但只有在utf-8编码下,它对应的汉字才有意义。我们可以一眼看出这点,可是要让计算机做到这点,就很难了。

》》》 s = ’水壶’》》》 s18: ’\xe6\xb0\xb4\xe5\xa3\xb6’》》》 print unicode(s, ’big5’)瘗游ㄥ》》》 print unicode(s, ’gbk’)姘村6》》》 print unicode(s, ’gb2312’)姘村6》》》 print unicode(s, ’utf-8’)水壶

使用python如何得到此种编码&27979;35797;所对应的中文呢

 简单的用Python说明一下:  》》》 s=b’\xe6\xb5\x8b\xe8\xaf\x95’  》》》 print(s.decode(’utf-8’))  测试  》》》 u=u’\u6d4b\u8bd5’  》》》 print(u)  测试  每个Unicode字符的编码只有一个,表示为一个或长或短的十六进制数。但把一串Unicode转换成真正用于存储和传输的字节序列,办法很多。UTF-8就是使用最广泛(绝大多数情况下也应该使用)的一种Unicode编码方法。  至于格式的不同,只是用的地方不一样,用不同的格式封一下。我记得编码1和3是HTML实体,2是Python的Unicode字符表示法,4是URL中不能直写字符的转义表示法。

python3 用isinstance()检查unicode编码报错

for text that’s unicode in Python 2 and str in Python 3, for binary that’s str/bytes in Python 2 and bytes in Python 3python3中的str 对应python2中的unicode, 所以python3中没有unicode***隐藏网址***

文章分享结束,python查看unicode编码表和Python 字符集编码 - UTF-8 编码的答案你都知道了吗?欢迎再次光临本站哦!

python查看unicode编码表(Python 字符集编码 - UTF-8 编码)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.