uuid:全局唯一标识符
楔子
在请求数据的时候,我们得到的可能是一堆字节,这个时候我们会通过decode将其解码。但是解码的前提是我们需要知道其对应编码是什么,比如:utf-8、iso-8859-1、gbk等等。而python也提供了相应的模块,用于检测字节对应的编码。
chardet检测编码
from chardet import detect
# 直接传入字节即可
print(detect(b"are you ok?")) # {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
"""
可以看到返回一个字典,包含三个key:
encoding: 使用的编码
confidence: 检测的准确度
language: 所使用的语言
"""
对于其它语言也是支持的
from chardet import detect
chinese_utf8 = "你为什么这么熟练啊".encode("utf-8")
chinese_gbk = "你为什么这么熟练啊".encode("gbk")
print(detect(chinese_utf8))
# {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
print(detect(chinese_gbk))
# {'encoding': 'GB2312', 'confidence': 0.8888888888888888, 'language': 'Chinese'}
我们看到当使用utf-8编码的时候,虽然能检测出编码,但是无法推测出语言,因为任何语言的字符都可以正常使用utf-8进行编码。但是下面的gbk是可以推断出语言的,因为这是专门用于中文的编码,显示的gb2312是gbk的子集。
from chardet import detect
jp_utf8 = "なんでそんなに慣れてんだよ".encode("utf-8")
jp_euc = "なんでそんなに慣れてんだよ".encode("euc-jp")
print(detect(jp_utf8))
# {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
print(detect(jp_euc))
# {'encoding': 'EUC-JP', 'confidence': 1.0, 'language': 'Japanese'}
对于日文也是一样的,chardet支持多种语言。
尤其是向其它地方请求数据的时候,给你返回了一堆你不知道是什么编码的字节,这个时候就可以使用chardet,最典型的就是requests。
我们在使用requests的get方法之后,会调用text得到请求的html。但是有时候调用text返回的内容里面包含乱码,这是因为requests在内部是先获取的字节,然后再进行解码、返回,而在解码的时候,使用了错误的编码造成的
而一般我们在调用text之前,我们会手动指定使用的编码
import requests
res = requests.get("http://www.baidu.com")
# res.content: 会拿到html对应的字节流
# res.encoding: 所使用的编码,根据网站决定
# res.text: 会先获取res.content,然后通过res.encoding进行解码得到res.txt
# 但是默认的res.encoding不一定能够正常解码,这个时候我们会手动指定res.encoding
# 将res.apparent_encoding赋值给res.encoding
res.encoding = res.apparent_encoding
# 然后调用res.text就能正常打印内容了
print(res.text)
那么我们就可以进入源码中看看这个res.apparent_encoding是什么
@property
def apparent_encoding(self):
"""The apparent encoding, provided by the chardet library."""
return chardet.detect(self.content)['encoding']
看到了吗?requests也是通过chardet检测对应的编码的,因为requests默认使用网站返回的编码,但是不一定靠谱。而通过这一步,会根据返回的字节手动推断出其使用的编码,然后赋值给res.encoding,这样再解码就没有问题了。
因此想知道返回的字节是什么编码的话,使用chardet是个很不错的选择。
uuid:全局唯一标识符的更多相关文章
- JS生成全局唯一标识符(GUID,UUID)的方法
全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...
- Javascript 生成全局唯一标识符 (GUID,UUID)
全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...
- GUID全局唯一标识符
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...
- GUID全局唯一标识符相关知识了解
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情 ...
- 全局唯一标识符(GUID)
全局唯一标识符,简称GUID(发音为/ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-106 ...
- GUID (全局唯一标识符)
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中. ...
- Identifier:GUID (全局唯一标识符)
ylbtech-Miscellaneos-Identifier:GUID (全局唯一标识符) A,返回顶部 1, 全局唯一标识符(GUID,Globally Unique Identifier)是一种 ...
- 全局唯一标识符(GUID,Globally Unique Identifier)
全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的网络或系统中.在理想情况 ...
- [ActionScript 3.0] AS3 GUID(全局唯一标识符)
package com.controls { import flash.display.Sprite; import flash.system.Capabilities; public class G ...
- GUID(Globally Unique Identifier)全局唯一标识符
最近有大量数据存入数据库时,因为主键为一个nvarchar类型,起初想着用int 类型,每次打开表的时候,获取最后一行的ID,然后让其++. 但发现由于字段是char类型,数据库对其进行了排序.再次插 ...
随机推荐
- react中 如何异步展示后台接口的提示消息
调用接口后,后台会返回这样的一段信息提示:{"errCode":400002,"errMsg":"字段校验异常","data&qu ...
- windows下配置tomcat服务器的jvm内存大小的两种方式
难得遇到一次java堆内存溢出(心里想着,终于可以来一次jvm性能优化了$$) 先看下报错信息, java.lang.OutOfMemoryError: GC overhead limit excee ...
- Flutter之ExpansionTile组件
ExpansionTile组件 ExpansionTile Widget就是一个可以展开闭合的组件,常用的属性有如下几个. title:闭合时显示的标题,这个部分经常使用Text Widget. le ...
- EMC DS300B光纤交换机扩展光口license
一.通过EMC指定的网站激活license 激活license,生成激活码需要三个信息: 1.交换机WWN号:可在交换机铭牌上查看:(16位) 2.SN号码:AQA00***9*6(11位) 3.ke ...
- c++学习笔记_1
前言:本笔记所对应的课程为中国大学mooc中北京大学的程序设计与算法(三)C++面向对象程序设计,主要供自己复习使用 第一章 从c到c++ 引用 定义引用时一定要将其初始化成某个变量 引用从一而终,引 ...
- Spring 控制器重定向
1.示例 return "redirect:/allUser"; redirect是跳转的意思后面是跳转的页面
- vue首页组件切换
结构如下 代码如下: <template> <div id="page"> <div style="width: 100%" cl ...
- Java总复习内容
StringBuffer定义时需要用正确的方式 例如: StringBuffer xxx = new StringBuffer("雯雯是猪"); 使用StringBuffer的连接 ...
- 2019年9月(System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本。)问题解决记录
System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本. 在百度上寻找了很久,都说是权限的问题,可是更改过后一点效果也没有. 实际上真 ...
- Redis提供的持久化机制
Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,Redis的作者在博客中写到, ...