UTF-8“字”的编码是&#x 5B57,5B57是2个字节,请问&#x是什么意思?怎么缺少1个字节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UTF-8“字”的编码是&#x 5B57,5B57是2个字节,请问&#x是什么意思?怎么缺少1个字节相关的知识,希望对你有一定的参考价值。

你讨论的 字 是 html 文件 里 的汉字编码。
汉字 "字" 的 unicode 编码是 十六进制数 5B57, 5B57是2个字节。
&#x 是 网页文件 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“字”的编码是&#x 5B57,5B57是2个字节,请问&#x是什么意思?怎么缺少1个字节的主要内容,如果未能解决你的问题,请参考以下文章

GBK与UTF-8编码错误转换后,无法再正确恢复

utf-8无bom格式编码

萌新笔记——C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)

python2.x 默认编码问题

中文字符与编码格式占位问题

python中把ISO-8859-1编码转化为UTF-8