前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 语法基础之字符集编码

python 语法基础之字符集编码

原创
作者头像
kevindi
发布于 2018-09-10 12:11:28
发布于 2018-09-10 12:11:28
1.6K00
代码可运行
举报
文章被收录于专栏:python 实践经验python 实践经验
运行总次数:0
代码可运行

Python初学者编码实践中经常遇到encode error,decode error,如下:

例1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5728' in position 1

例2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 0-1: invalid continuation byte

1、百度的时候,大家都建议在代码文件头加上字符集定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-

这种方法大部分情况下可以解决大部分的问题。那么它解决的是什么问题呢?

我们需要理解两个概念:

1)、# -*- coding: utf-8 -*- 的作用是声明 python源代码文件的编码格式。 谁会读取Python的源代码呢? 一个是IDE编辑工具,比如pycharm,nodpad++,editpluss等,我们在写代码的时候使用。

2)、另一个是Python解释器,是执行Python程序的时候使用。

当我们使用IDE编辑器打开Python代码的时候,如果出现乱码,我们都知道是编辑器的解码方式和代码文件的编码方式不一致导致的。需要修改编辑器的解码方式。

那么Python解释执行Python程序的时候使用的是设么解码方式呢?可以用下面的方式查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sys.getdefaultencoding()

可以用下面的方式修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
reload(sys)
sys.setdefaultencoding('utf-8')
sys.getdefaultencoding()

所以,代码文件第一行加 字符集定义,解决Python解释器读取Python代码文件时的字符集识别问题

2、在print的时候出现异常,或者写文件,或者解析网络报文,或者做str对象处理的时候出现乱码。

这个时候我们需要理解:

1)、文件读写、网络报文读写都可以理解为IO读写。是byte处理,所以读写前后需要使用同样的字符编码方式。

2)、print、str对象的处理涉及到终端的编码格式。print之后,在pycharm的输出窗口,或者windows的CMD命令行窗口,或者Linux的shell窗口,需要适配终端的编码方式

3)、字符编码基本可分为三大类:起源于美国的ASCII,支持英文字符、数字、标点符号、键盘上的特殊字符;国际编码unicode,支持ascII的字符集外,又支持中文,韩语,日语等。因为unicode占用空间大,所以又出现了utf-8。需要强调的一点是

unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间大

utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示

1.内存中使用的编码是unicode,用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快)

2.硬盘中或者网络传输用utf-8,网络I/O延迟或磁盘I/O延迟要远大与utf-8的转换延迟,而且I/O应该是尽可能地节省带宽,保证数据传输的稳定性。

下面详细介绍了unicode和utf-8的使用场景:

在程序执行之前,内存中确实都是unicode编码的二进制,比如从文件中读取了一行x="egon",其中的x,等号,引号,地位都一样,都是普通字符而已,都是以unicode编码的二进制形式存放与内存中的

但是程序在执行过程中,会申请内存(与程序代码所存在的内存是俩个空间),可以存放任意编码格式的数据,比如x="egon",会被python解释器识别为字符串,会申请内存空间来存放"egon",然后让x指向该内存地址,此时新申请的该内存地址保存也是unicode编码的egon,如果代码换成x="egon".encode('utf-8'),那么新申请的内存空间里存放的就是utf-8编码的字符串egon了

针对python3如下图

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器

如果服务端encode的编码格式是utf-8, 客户端内存中收到的也是utf-8编码的二进制。

从上面的说明,我们知道了unicode和utf-8的应用场景,就需要用下面的方式进行转换:

字符串通过编码转换为字节码,字节码通过解码转换为字符串

str--->(encode)--->bytes,bytes--->(decode)--->str

参考:

https://www.cnblogs.com/zihe/p/6993891.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
护卫神安全防护软件的绕过总结
最近的恰饭文有点多,是时候该分享些东西了,等以后有空了再整理下其他WAF的绕过系列分享给大家,感谢大家的理解和支持,抱拳!
潇湘信安
2021/12/10
2K0
护卫神安全防护软件的绕过总结
【思路/技术】某大佬的BypassWAF新思路(附脚本)
网上关于安全狗的sql绕过研究,大多数是fuzz绕过的帖子,fuzz方法常常使用注释绕过,涉及到数据库特性,而且广泛用于注释语法的星号(*)可能会被网站自带的防恶意代码模块拦截了,在实践中体验不好。太多fuzz过waf的文章,多数是使用注释绕过,在我看来,所有fuzz绕过,本质就是正则匹配逃逸。
HACK学习
2019/08/05
1.9K0
实战 | WAF-Bypass之SQL注入绕过思路总结
如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,例如百度云加速、阿里云盾等,通过更改DNS解析,把流量引入WAF集群,流量经过检测后转发请求到源站。如图,dict.com接入接入WAF后,dict.com的DNS解析结果指向WAF集群,用户的请求将发送给WAF集群,WAF集群经过检测认为非攻击请求再转发给源站。
HACK学习
2022/02/17
5K0
实战 | WAF-Bypass之SQL注入绕过思路总结
我的wafBypass之道
去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常谈的话题也没什么可写的。
用户1467662
2019/04/19
3K0
我的wafBypass之道
Bypass 护卫神SQL注入防御(多姿势)
   护卫神一直专注服务器安全领域, 其中有一款产品,护卫神·入侵防护系统 ,提供了一些网站安全防护的功能,在IIS加固模块中有一个SQL防注入功能。
Bypass
2019/07/08
1.9K0
Bypass 护卫神SQL注入防御(多姿势)
Waf功能、分类与绕过
Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
婷婷的橙子
2020/11/15
2.8K0
Waf功能、分类与绕过
浅谈WAF绕过技巧
waf分类 掌握绕过各类WAF可以说是渗透测试人员的一项基本技能,本文将WAF分为云WAF、硬件WAF、软件WAF、代码级WAF,分别从各自的特性来谈一些相关的绕过技巧,更侧重于针对基于规则类的WAF绕过技巧。 云waf Eg:加速乐 目前CDN服务的功能是越来越多,安全性也越加强悍,用户的每个请求都会被发送到指定的CDN节点上,最后转发给真实站点。这个过程就好像加了一道关卡,这个关卡提供了缓存、加速、防御的特点。 绕过关键:查询真实IP,若是直接访问服务器的IP就不经过CDN了。 以下四点有助于绕过: 1
FB客服
2018/02/26
3.8K0
浅谈WAF绕过技巧
分析绕过一款适合练手的云 WAF
X-WAF 是一款适用中、小企业的云 WAF 系统,让中、小企业也可以非常方便地拥有自己的免费云 WAF。
信安之路
2018/08/08
1.4K0
分析绕过一款适合练手的云 WAF
深入理解SQL注入绕过WAF和过滤机制
深入理解SQL注入绕过WAF和过滤机制 知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 本文小结 0x6 参考资料 0x0 前言 促使本文产生最初的动机是前些天在做测试时一些攻击向量被WAF挡掉了,而且遇到异常输入直接发生重定向。之前对WAF并不太了解,因此趁此机会科普一下并查阅了一些绕过WAF的方法。网上关于绕过WAF有诸多文章,但是观察之后会发现大体上绕
tnt阿信
2020/08/05
3.3K0
深入理解SQL注入绕过WAF和过滤机制
Bypass 360主机卫士SQL注入防御(多姿势)
在服务器客户端领域,曾经出现过一款 360 主机卫士,目前已停止更新和维护,官网都打不开了,但服务器中依然经常可以看到它的身影。
信安之路
2018/08/08
1.5K0
Bypass 360主机卫士SQL注入防御(多姿势)
SQL注入的绕过方式
这篇文章搜集整理自@Junehck师傅的Github,记录了他在实战中遇到的各种WAF拦截SQL注入的场景和绕过姿势,文章并不是完整的,仅记录了Bypass部分。
cultureSun
2023/05/18
9780
SQL注入的绕过方式
HW中如何利用WAF缺陷进行绕过
免责声明:由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
Al1ex
2025/02/19
1270
HW中如何利用WAF缺陷进行绕过
干货 | 各种WAF绕过手法学习
https://github.com/danielmiessler/SecLists/tree/master/Fuzzing
Power7089
2021/04/30
4K0
网站渗透测试,看这篇就够了
2,查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的cms或者其他漏洞。
天钧
2020/02/26
3.2K0
PHP+Mysql注入防护与绕过
今天给大家分享一个关于php常见的注入防护以及如何bypass的文章,文章内容来源国外某大佬总结,我做了一下整理,文章来源地址不详,下面正文开始。以下的方式也仅仅是针对黑名单的过滤有一定的效果,为了安全最好还是以白名单的方式对参数进行检测。
信安之路
2018/08/08
1.5K0
PHP+Mysql注入防护与绕过
BypassWAF(小白食用)
前言:现在绕过waf手法在网上层出不穷,但是大家好像忘记一个事情就是,思路比方法更有价值,大家对着网上一些手法直接生搬硬套,不在意是不是适合的场景,网上的文章,好像着急的把所有的绕过方法都给你罗列出来。没有传授给你相应的技巧。到最后,小白拿着一堆绕waf的方法却被waf拦在外面。
红队蓝军
2025/02/12
2510
BypassWAF(小白食用)
WAF Bypass数据库特性(MSsql探索篇)
通过1.e这样的形式,我曾用它绕过了D盾的SQL注入防护,通过简单的Fuzz,我们来一起探索一下MSsql特性。
Bypass
2019/07/08
3.1K0
Bypass ngx_lua_waf SQL 注入防御(多姿势)
ngx_lua_waf 是一款基于 ngx_lua 的 web 应用防火墙,使用简单,高性能、轻量级。默认防御规则在 wafconf 目录中,摘录几条核心的 SQL 注入防御规则:
信安之路
2018/08/08
7490
Bypass ngx_lua_waf SQL 注入防御(多姿势)
见招拆招:绕过WAF继续SQL注入常用方法
Web Hacker总是生存在与WAF的不断抗争之中的,厂商不断过滤,Hacker不断绕过。WAF bypass是一个永恒的话题,不少基友也总结了很多奇技怪招。那今天我在这里做个小小的扫盲吧。先来说说WAF bypass是啥。 WAF呢,简单说,它是一个Web应用程序防火墙,其功能呢是用于过滤某些恶意请求与某些关键字。WAF仅仅是一个工具,帮助你防护网站来的。但是如果你代码写得特别渣渣,别说WAF帮不了你,就连wefgod都帮不了你…所以不能天真的以为用上WAF你的网站就百毒不侵了。开始正题—- 1>注释符
FB客服
2018/02/02
1.9K0
Bypass WAF (小白食用)
前言:现在绕过waf手法在网上层出不穷,但是大家好像忘记一个事情就是,思路比方法更有价值,大家对着网上一些手法直接生搬硬套,不在意是不是适合的场景,网上的文章,好像着急的把所有的绕过方法都给你罗列出来。没有传授给你相应的技巧。到最后,小白拿着一堆绕waf的方法却被waf拦在外面。
亿人安全
2024/09/18
2630
Bypass WAF (小白食用)
相关推荐
护卫神安全防护软件的绕过总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验