QQ群名片尾巴生成原理

前言

这已经是好几年以前的小玩意了,今天闲着无聊翻翻相册,无意看到的,因此写下了这篇。

正文

Unicode编码
先来介绍一下Unicode编码

它为了使计算机实现跨语言、跨平台的文本转换及处理而产生的业界标准。

控制字符
控制字符,顾名思义,它是出现于特定的信息文本中,表示某一控制功能的字符。

而关于qq群名片小尾巴生成,主要用到以下两个Unicode控制字符

&# 8237;LRO‭ 开始从左向右覆盖

&# 8238;RLO开始从右向左覆盖

大多数语言都是从左向右读的,不过还真有从右向左读的语言,所以就出现了RLO(Right-to-Left Override),另外RLO在渗透方面也有应用(RLO文件名欺骗)

如果某些网站和谐某些关键字如“xyz”,你可以这样写"RLO字符+zyx",这样效果就是“xyz”。同理,在qq中,小明撤回了一条消息,如果把小明的群昵称改成“RLO字符+小明”,那么就会显示“息消条一了回撤明小”,那么如何做到”小明撤回了一条消息并打了你一下”的效果呢?
我们一步一步分析:

  1. 程序先得到用户的nickname
  2. 再拼接“撤回了一条消息”
  3. 输出顺序是nickname + “撤回了一条消息”

我们把nickname中加入RLO字符和tail(下一你了打并)以及LRO字符

  1. 程序得到nickname
  2. 拼接“撤回了一条消息”
  3. 先输出nickname
    小明/
  4. 到RLO字符时,从右向左输出
  5. 从右向左输出tail
    小明/并打了你一下
    此时最后一次输出后的位置(即’/’)在“小明”与“并打了你一下之间”
  6. 到LRO字符时,从左向右输出
  7. 输出拼接字符
    小明撤回了一条消息/并打了你一下

这样就可以显示小明撤回了一条消息并打了你一下的效果了
代码
原理有了,实践开始


        Button btn=(Button)findViewById(R.id.btn);
	
		btn.setOnClickListener(new View.OnClickListener(){
		@Override
		public void onClick(View v){
			EditText nn=(EditText)findViewById(R.id.name);
			EditText tl=(EditText)findViewById(R.id.tail);
			String name=nn.getText().toString();
			String tail=tl.getText().toString();
			if (name.length()==0 || tail.length()==0){
				Toast.makeText(getApplicationContext(),"Please input your nick name and tail!",Toast.LENGTH_LONG).show();
				return;
			}
			String s=name+(char)8238+reverse(tail)+(char)8237;
			ClipboardManager cm=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
			ClipData cd=ClipData.newPlainText(null,s);
			cm.setPrimaryClip(cd);
			Toast.makeText(getApplicationContext(),"Copied",Toast.LENGTH_LONG).show();
		}
		
		public String reverse(String str){
			return new StringBuffer(str).reverse().toString();
		}
	});

效果:
image.png

源码请访问Github:Click me

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正崽不emo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值