找回密码
 会员注册
查看: 184|回复: 0

零宽字符编码python解码

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64021
发表于 2024-9-13 16:09:25 | 显示全部楼层 |阅读模式
零宽字符简要描述零宽字符(Zero-WidthCharacters)是一组在文本中不占用显示空间的特殊字符。以下是一些常见的零宽字符及其简要描述:零宽度空格(ZeroWidthSpace):Unicode码:U+200B常见于文本处理、格式化和布局中,用于插入间隔或边界,而不影响可见布局。零宽度非断空格(ZeroWidthNo-BreakSpace):Unicode码:U+FEFF这是一个特殊的空格字符,用于阻止特定位置的换行分隔。零宽度连字符(Zero-WidthJoiner):Unicode码:U+200D用于阿拉伯语、印度语系等文字中,使不会发生连字的字符间产生连字效果。零宽度断字符(Zero-WidthNon-Joiner):Unicode码:U+200C用于阻止会发生连字的字符间的连字效果。左至右标记(Left-to-RightMark):Unicode码:U+200E用于在混合文字方向的多种语言文本中(如混合左至右书写的英语与右至左书写的阿拉伯语)指示文本从左到右显示。右至左标记(Right-to-LeftMark):Unicode码:U+200F与左至右标记相反,它指示文本从右到左显示。这些只是零宽字符中的一部分表达形式是8203零宽字符的十六进制表示,也就是说这个表示方法和直接使用U+200B是等价的。在一些字符处理软件或编程语言中,可能会使用这种十六进制表示方法来操作或表示这个字符。例如,在Python中,可以使用"\u200b"或"\u200B"来表示8203零宽字符。列如:码点:U+200BPython:\u200b或\u200B十六进制表示:十进制:8203解码原理使用读取python读取零宽节字符时,python会自动将字符转变为unicode编码而在此编码中使用的零宽节字符unicode编码有:\u200b,\u200c,\u200d经过观察可以得知是使用了摩尔斯电码对应:,,替换:替换”空格”替换”.”替换“-”经摩斯密码解密后为?u6211此编码格式为unicode编码的十进制形式6211解码后得到明文:我解码程序importredefreplace_unicode_chars(text):#定义要替换的Unicode字符及其替换字符replacements={'\u200b':'',#ZEROWIDTHSPACE'\u200c':'.',#ZEROWIDTHNON-JOINER'\u200d':'-'#ZEROWIDTHJOINER}#使用translate方法替换Unicode字符trans_table=str.maketrans(replacements)returntext.translate(trans_table)#示例使用(这里我们假设text_with_unicode包含实际的Unicode字符)withopen('put.txt','r',encoding='utf-8')asfile:string=file.read()text_with_unicode=stringreplaced_text=replace_unicode_chars(text_with_unicode)print(replaced_text)MORSE_CODE_DICT={'.-':'A','-...':'B','-.-.':'C','-..':'D','.':'E','..-.':'F','--.':'G','....':'H','..':'I','.---':'J','-.-':'K','.-..':'L','--':'M','-.':'N','---':'O','.--.':'P','--.-':'Q','.-.':'R','...':'S','-':'T','..-':'U','...-':'V','.--':'W','-..-':'X','-.--':'Y','--..':'Z','.----':'1','..---':'2','...--':'3','....-':'4','.....':'5','-....':'6','--...':'7','---..':'8','----.':'9','-----':'0','.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f','--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l','--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r','...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x','-.--':'y','--..':'z','.--.-':'?'#摩尔斯电码中的问号}defdecode_morse(morse_code):words=morse_code.split()#假设单词之间用空格分隔decoded_words=[]forwordinwords:#假设字符之间也是用空格分隔的chars=word.split()#过滤掉空字符串和不在字典中的字符decoded_chars=[MORSE_CODE_DICT[char]forcharincharsifcharandcharinMORSE_CODE_DICT]#如果decoded_chars不为空,则将其加入decoded_words列表ifdecoded_chars:decoded_words.append(''.join(decoded_chars))return''.join(decoded_words)defunicode1(s):#使用正则表达式查找所有形如?uXXXX的字符串matches=re.findall(r'\?u([0-9a-fA-F]{4})',s)finsh=''forhex_codeinmatches:#将十六进制数字转换为整数(Unicode码点)unicode_code_point=int(hex_code,16)#使用chr()函数将整数(Unicode码点)转换为对应的Unicode字符a=chr(unicode_code_point)finsh=finsh+aprint(finsh)#输出对应的Unicode字符morse_message=replaced_textdecoded_message=decode_morse(morse_message)print(decoded_message)unicode1(decoded_message)put.txt开头结尾分别少了一个 公 字和  谐  字社会主义核心价值观解码得到flag,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 00:32 , Processed in 0.687138 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表