–首先说一下如何查询字符编码
导入chardet库,调用detect方法即可查询字符编码,但只接受字符串或字节类型,传unicode会报错。
import chardet
a = 'a'
print chardet.detect(a)
{'confidence': 1.0, 'language': '', 'encoding': 'ascii'}
因为Python2默认是ascii
编码,我们写代码时虽然会在文件头标记# -*- coding: utf-8 -*-
,但我们在进行字符串切割后再比较时还是会报错,因为要对字符串(包含中文)进行操作后比较是要在unicode
编码格式下进行才可以的。
来一发例子:
l1 = [{
'city': '北京市'}, {
'city': '天津'}, {
'city': '上海市'}, {
'city': '洛阳'}]
a = '市'
for item in l1:
city = item['city']
print '=' * 40
print item['city']
b = city[-1]
print b
if b == a:
print 'b=a'
city = city[0:-1]
print '=' * 40
/usr/bin/python2.7 /Users/apple/PycharmProjects/python2_test/test.py
========================================
北京市
�
========================================
========================================
天津
�
========================================
========================================
上海市
�
========================================
========================================
洛阳
�
========================================
Process finished with exit code 0
可以看出并没有把北京市和上海市匹配出来,是因为utf8编码格式下对中文字符串切割会导致编码格式错乱。
我们再将上例中的city解码为unicode试一下
l1 = [{
'city': '北京市'}, {
'city': '天津'}, {
'city': '上海市'}, {
'city': '洛阳'}]
a = '市'
for item in l1:
city = item['city'].decode('utf8')
print '=' * 40
print item['city']
b = city[-1]
print b
if b == a:
print 'b=a'
city = city[0:-1]
print '=' * 40
========================================
北京市
市
========================================
========================================
天津
津
========================================
========================================
上海市
市
========================================
========================================
洛阳
阳
========================================
发现北京市已经打印出来最后一个字符为市
,但在b==a
判断时仍然失败,这是因为此时b为unicode
编码,而a为utf8
编码,自然是不想等。
那么再修改a的编码为unicode试下:
l1 = [{
'city': '北京市'}, {
'city': '天津'}, {
'city': '上海市'}, {
'city': '洛阳'}]
a = u'市' #前面加u则默认为unicode编码
for item in l1:
city = item['city'].decode('utf8')
print '=' * 40
print item['city']
b = city[-1]
print b
if b == a:
print 'b=a'
city = city[0:-1]
print city
print '=' * 40
========================================
北京市
市
b=a
北京
========================================
========================================
天津
津
天津
========================================
========================================
上海市
市
b=a
上海
========================================
========================================
洛阳
阳
洛阳
========================================
顺带在这里说下Python的encode和decode
之所以有encode和decode,是因为存在一个中间编码unicode
,当我们调用decode时,是将一个变量解码为unicode,decode()括号中跟的时变量的原本编码,encode()将unicode
编码转换为自己想要的编码格式。如
a = 'a' # 此时a的编码为ascii
a = a.decode('ascii') # 将a解码为unicode并赋值给a
# 如果我们这样写,则会报错,因为a的编码不是utf8
a = a.decode('uft8')
decode的作用就是,不管原来什么类型,将它解码为unicode
,但原来是什么类型的编码必须知道且填写正确。
encode为对unicode
类型进行编码
a = u'a' # a为unicode编码
a = a.encode('utf8') # 将a编码为utf8
b = 'b' #如果有文件头说明`# -*- coding: utf-8 -*-`则为utf8编码,否则为ascii编码
b = b.encode('utf8') # 则会报错,因为b不为unicode编码,或者不报错但得不到utf8编码
文章浏览阅读2.3w次,点赞19次,收藏169次。Redis的常用的集群方式主要有以下3种1:主从复制2:哨兵(Sentinel)3:Cluster一、主从主从其实就是一般包含一个主,一个或多个从,从节点从主节点复制数据,可以实现读写分离,主节点做写,从节点做读。在配置上基本没什么要改的。这里用Linux做演示。//这里启动3个docker,就让5678当主节点吧 docker run -d -p 5678:6379 redis docker run -d -p 5679:6379 redis docker run -d _redis集群三种方式
文章浏览阅读130次。C语言基础语法scanf_4 输入字符串&混合输入_scanf混合类型输入
文章浏览阅读1.4k次。VC++ 效果,是静态的3D效果,并不能旋转3D图形,因此来说是比较基础级的OpenGL三维生成函数,看上去像是使用了贴图技术,画感不是很细腻,仅供学习参考哦。项目源代码:部分代码:程序运行截图:如果您想学C/C++编程,这里有一节三天的免费的VIP试听课和一份学前资料,加QQ群:1037025565领取。..._c++ 3d动画
文章浏览阅读2.7k次。在网上看了很多有关的有用的文章,给大家参考一下1.https://netbeans.org/kb/docs/java/native_pkg_zh_CN.html(NetBeans IDE 中的本机打包(netbeans 官网))结果是生成可安装的程序,就像大家平时安装软件那样,安装后是一个文件夹里面有很多东西,个人觉得不如直接生成exe文件,如22.https://blog.csdn.ne..._netbeans可执行文件
文章浏览阅读2.9k次,点赞11次,收藏33次。图像拼接代码汇总_图像拼接算法代码
文章浏览阅读796次。在html中我们可以很轻松的添加锚点设置, 只需要一个# 就可以了,但是在 vue 和 微信小程序这种单页面的程序中怎么办呢,下面以小程序的样例介绍一下, vue的和小程序的开发方式差不多。使用 wx.scrollTo来让页面滚动到位置就可以了 别忘了, boundingClientRect 后面要跟上 .exec() 才可以。很明显, 点击的按钮上我们绑定了一个 bindtap = gotocard 的事件, 下面看一下 事件的执行函数。我们要的效果是 点击上面的名片, 跳转到下面的名片位置。_微信小程序中可以通过a标签加锚吗
文章浏览阅读6.2k次,点赞4次,收藏11次。今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以此记录。GNU C预定义了一系列的宏,这些宏都是以双下划线开始的,这里只讲一下__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__,完整的GNU C的预定义宏可以到这里查看:https://gcc.gnu.org/onlinedocs/gcc-5.1.0/cp...___gnuc_minor__
文章浏览阅读5.2k次,点赞10次,收藏17次。解决ImportError: TensorBoard logging requires TensorBoard version 1.15 or above报错信息ImportError: TensorBoard logging requires TensorBoard version 1.15 or above解决办法pip uninstall tensorboard -ypip install tensorboard -i https://pypi.douban.com/simple/S_tensorboard logging requires tensorboard version 1.15 or above 但我的是1.6.0
文章浏览阅读2.2k次。ng-alain懒加载模块 未添加导致NZ模块未识别Can't bind to 'nzExtra' since it isn't a known property of 'nz-card'.1. If 'nz-card' is an Angular component and it has 'nzExtra' input, then verify that it is part of this..._nzextra
文章浏览阅读2.4k次。Object.create() 方法会使用指定的原型对象及其属性去创建一个新的对象。语法Object.create(proto, [ propertiesObject ])参数proto一个对象,应该是新创建的对象的原型。propertiesObject可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与Obje_status_object_create
文章浏览阅读1.9k次。python 使用plt画图,去除图片四周的白边方法用matplotlib.pyplot画的图,显示和保存的图片周围都会有白边,可以去掉。为了显示的更清楚,给图片加了红色的框代码“`import matplotlib.pyplot as pltfig, ax = plt.subplots()im = im[:, :, (2, 1, 0)]ax.imshow(im, aspect='equal')p..._python画图不要坐标轴外白色框
文章浏览阅读1.7k次。作者:zxh1307导语最近在做微前端的项目 , 过程中真是踩了不少坑 , 在有限的资料中不断试错 , 默默无语两行泪 哈哈. 在此次将采坑部分都记录下来, 让更多的人少走点弯路 , 此项目使用 蚂蚁金服qiankun 为基础作为开发 . 话不多说 开讲 !!!那什么是 qiankun 呢qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的..._乾坤 手动刷新页面