Skip to content

Instantly share code, notes, and snippets.

@octaviogb
Last active November 14, 2020 04:39
Show Gist options
  • Save octaviogb/00163424a5e54598cb2d447abb2d222b to your computer and use it in GitHub Desktop.
Save octaviogb/00163424a5e54598cb2d447abb2d222b to your computer and use it in GitHub Desktop.
Compactar o código como no https://www.dwitter.net/d/20584
function compact(f) {
return unescape(
f
.toString() // garanto que é uma string
.split('') // transformo em array de caracteres
.map( // vou iterar e transformar esses caracteres
(d,n) => `%uD${n%2?'C':'8'}${d.charCodeAt(0).toString(16)}`)
/*
aqui acontece a magia
D é o caracter
N é o índice da iteração
Os caracteres chineses são uma combinação de dois caracteres unicode
Um é /xD8.. e o outro /xDC..
Assim... eu converto o meu caracter atual em hex (/x)
Coloco o prefixo "u" de unicode
Coloco o prefixo "%" de encoding
e itero
*/
.join(''))} // no final, junto tudo em uma string
const c = compact("alert('teste')") // para essa string, o resultado é: 𨑬𩑲𭀨𙱴𩑳𭁥𙰩
unescape(escape(c).replace(/u../g,'')) // aqui é como você faz o caminho contrário, usando Regex
console.log("的".charCodeAt(0).toString(15)) // Podem ver o comportamento de um caracter chinês aqui
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment