×

python中decode函数

python中decode函数(python unicode编码)

admin admin 发表于2023-11-14 22:36:22 浏览37 评论0

抢沙发发表评论

本文目录

python unicode编码

python unicode编码:

  下面的代码创建了一个Unicode字符串,用UTF-8编码器将它编码,然后写入到一个文件中去,接着把数据从文件中读回来,解码成Unicode字符串对象,最后,打印出Unicode字符串,用以确认程序正确地运行。

  在Linux中编写,在VIM中输入如下代码,保存为uniFile.py  

       

# /home/xiaopeng/python/code/uniFile.py  ’’’  An example of reading and writing Unicode strings:Writes  a Unicode string to a file in utf-8 and reads it back in  ’’’  CODEC = ’utf-8’ 编码方式  FILE = ’unicode.txt’ 要存的文件名  hello_out = u“Hello world\n“ 创建了一个Unicode格式的字符串  bytes_out = hello_out.encode(CODEC) 用UTF-8编码  f = open(FILE,’w’)  f.write(bytes_out) 写入指定文件中  f.close()  f = open(FILE,’r’)  bytes_in = f.read() 读取  f.close()  hello_in = bytes_in.decode(CODEC) 解码  print hello_in 打印

  在终端中输入:python uniFile.py

  结果打印出 Hello world

  然后在python目录下会发现多了一个名为unicode.txt的文件,用cat命令查看一下,发现里面的内容和打印的结果一样.

  把Unicode应用到实际中注意一下四点:

  1 程序中出现字符串时一定要加一个前缀u

  2 不要用str()函数,用Unicode()代替

  3 不要用过时的string模块。如果传给它非ASCII码,它会把一切搞砸。

  4 不到必须时不要在你的程序里编解码Unicode字符,只在你要写入文件或者数据库或者网络时,才调用encode()函数和decode()函数。

关于python如何实现各进制转换的总结大全

ctf经常遇到进制转换的问题,就正好做一个进制转换总结,分享出来供大家参考学习,下面来一起看看详细的介绍:字符串与十六进制转换例如百度ctf 12月的第二场第一个misc?1666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D比较简单的一种做法就是直接调用字符串的.decode(’hex’)解密即可, 但如果不用这个函数你会怎么解呢?一种思路就是先2个分组,解出每组的ascii值,合并下字符串即可得到,具体代码如下?1234567import res=’666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D’s = re.findall(r’.{2}’,s)s = map(lambda x:chr(int(x,16)),s)print ’’.join(s)》》》flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}前面说了字符串的decode(’hex’)函数,另外还有两个转16进制的函数,这里都总结一下内置函数hex()只能转换10进制整数为十六进制,不能转字符串binascii库的hexlify()和b2a_hex()这两个函数的功能是将字符串转换成十六进制,对应的解密函数分别为 unhexlify()和a2b_hex()进制互转二进制,八进制,十六进制转10进制比较简单,直接调用int函数?1int(str,base) //返回十进制整数,但注意此时第一个参数为字符串对应的解密函数分别是?12345bin() //10进制转二进制 oct() //十进制转八进制 hex() //十进制转十六进制但二进制直接转16进制就需要多走一步了,先用int转十进制,在用上面提到的hex()函数将十进制转换成十六进制,比较精简的写法是?1map(lambda x:hex(int(x,2)),)最后在附上自己用python写的一个进制转换小工具,主要功能是对一组二进制,或者ascii,或十六进制转换成字符串,想必ctf上也经常会遇到这类题型吧?1234567891011121314151617181920212223242526272829303132333435363738394041424344# make by 江sir#coding:utf-8import reimport argparse def bintostr(text): text = text.replace(’ ’,’’) text = re.findall(r’.{8}’,text) s = map(lambda x:chr(int(x,2)),text) #批量二进制转十进制 flag = ’’.join(s) return flag def asciitostr(text): if ’ ’ in text: text = text.split(’ ’) elif ’,’ in text: text = text.split(’,’) s = map(lambda x:chr(int(x)),text) flag = ’’.join(s) return flag def hextostr(text): text = re.findall(r’.{2}’,text) #print text s = map(lambda x:chr(int(x,16)),text) #print s flag = ’’.join(s) return flag if __name__ == ’__main__’: parser = argparse.ArgumentParser() parser.add_argument(“-b“) parser.add_argument(“-a“) parser.add_argument(“-x“) argv = parser.parse_args() #print argv if argv.b: res = bintostr(argv.b) elif argv.a: res = asciitostr(argv.a) elif argv.x: res = hextostr(argv.x) print res用法:十六进制转字符串:666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D?12bintostr.py -x “666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D“flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}二进制转字符串:可以有空格,也可以无空格00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100?12bintostr.py -b “00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100“/f6732410aadc037fb0cbaa00c7531373.txtascii转字符串可以是空格分隔,也可以是,分隔s=’45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32’?12bintostr.py -a “45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32“-.-. - ..-. .-.. ... -... ..--.- -... ... .-..以上实例均来自某些ctf赛题总结

python中的b32decode(s, casefold=False, map01=None) 函数

不会查文档吗? 帮你查了下http://docs.python.org/2/library/base64.html#base64.b32decode内容也很简单啊,casefold 指定是否输出小写字母,map01是为了防止输出中会混淆数字0和字母o,数字1和字母I和l,=None是说输出中不包含数字0和数字1

Python判断字符串中是否有中文字符

首先,在Python中字符串的表示是 用unicode编码。所以在做编码转换时,通常要以unicode作为中间编码。decode的作用是将其他编码的字符串转换成unicode编码,比如 a.decode(’utf-8’),表示将utf-8编码的字符串转换成unicode编码encode的作用是将unicode编码的字符串转换成其他编码格式的字符串,比如b.encode(’utf-8’),表示将unicode编码格式转换成utf-8编码格式的字符串判断一个字符串中是否含有中文字符:好了,有了以上知识,就可以很容易的解决这个问题了。这是代码1 #-*- coding:utf-8 -*-23 import sys4 reload(sys)5 sys.setdefaultencoding(’utf8’)67 def check_contain_chinese(check_str):8 for ch in check_str.decode(’utf-8’):9 if u’\u4e00’ 《= ch 《= u’\u9fff’:10 return True11 return False12 13 if __name__ == “__main__“:14 print check_contain_chinese(’中国’)15 print check_contain_chinese(’xxx’)16 print check_contain_chinese(’xx中国’)17 18 结果:19 True20 False21 True