UTF-8“字”的编码是 5B57,5B57是2个字节,请问是什么意思?怎么缺少1个字节
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UTF-8“字”的编码是 5B57,5B57是2个字节,请问是什么意思?怎么缺少1个字节相关的知识,希望对你有一定的参考价值。
你讨论的 字 是 html 文件 里 的汉字编码。汉字 "字" 的 unicode 编码是 十六进制数 5B57, 5B57是2个字节。
是 网页文件 html 格式文件 里 汉字 unicode 编码 的 前缀。
字 x表示下面数值是十六进制。分号 是 一个汉字编码的结束符。
UTF-8 里字符编码长度与 用到的 字符集 有关,最短是1字节。汉字国标 GB2312 用两字节。你的 "字" 字 是 国标 GB2312,只有2字节。不是3字节。 参考技术A Utf-8是一个引入 utf-8编码规则的字符集。首先,ucs 和 unicode 只是将整数分配给字符的编码表。有几种方法可以将字符串表示为字节字符串。最常用的两种方法是将 unicode 文本存储为由两个或四个字节序列组成的字符串。这两种方法的形式名分别为 ucs-2和 ucs-4。除非另有说明,大多数字节都是这样的(big endian 约定)。要将 ascii 或 latin-1文件转换为 ucs-2,只需在每个 ascii 字节前插入0x00。要转换为 ucs-4,必须在每个 ascii 字节前插入三个0x00。在 unix 下使用 ucs-2(或 ucs-4)会导致严重的问题。这些经过编码的字符串包含特殊字符,如“或”/“ ,这些字符在文件名和其他 c 库函数参数中具有特殊意义。此外,大多数使用 ascii 文件的基于 unix 的工具不经过重大修改就无法读取16位字符。由于这些原因,ucs-2不适用于 unicode 文件名、文本文件、环境变量等的外部编码。
python中sys.setdefaultencoding('utf-8')的作用
在python中,编码解码其实是不同编码系统间的转换,默认情况下,转换目标是Unicode,即编码unicode→str,解码str→unicode,其中str指的是字节流,而str.decode是将字节流str按给定的解码方式解码,并转换成utf-8形式,u.encode是将unicode类按给定的编码方式转换成字节流str。注意调用encode方法的是unicode对象,生成的是字节流;调用decode方法的是str对象(字节流),生成的是unicode对象。若str对象调用encode会默认先按系统默认编码方式decode成unicode对象再encode,忽视了中间默认的decode往往导致报错。
比如有如下代码:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
s = ‘中文字符‘ # 这里的 str 是 str 类型的,而不是 unicode
s.encode(‘gb2312‘)
这句代码将 s 重新编码为 gb2312 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此
Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding为ANSCII,如果 s 不是这个类型就会出错。
UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position
0: ordinal not in range(128)
对于这种情况,我们有两种方法来改正错误:
1. 明确的指示出 s 的编码方式
#! /usr/bin/env python
# -*- coding: utf-8 -*-
s = ‘中文字符‘
s.decode(‘utf-8‘).encode(‘gb2312‘)
2. 更改 sys.defaultencoding 为文件的编码方式
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys) # Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入
sys.setdefaultencoding(‘utf-8‘)
str = ‘中文字符‘
str.encode(‘gb2312‘)
以上是关于UTF-8“字”的编码是 5B57,5B57是2个字节,请问是什么意思?怎么缺少1个字节的主要内容,如果未能解决你的问题,请参考以下文章