Advertisement
sam1902

Zero Width Decoder

Apr 4th, 2018
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.00 KB | None | 0 0
  1. from sys import argv
  2. if len(argv) <= 1:
  3.     exit("Synthax:\npython3 script.py encodedInvisibleString\nYou can happen other chars as well, they'll just be ignored")
  4.  
  5. def textFromBits(bits, encoding='utf-8', errors='surrogatepass'):
  6.     n = int(bits, 2)
  7.     return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode(encoding, errors) or '\0'
  8. # Used to separate bits
  9. #zws = "\u200b" # Zero width space
  10. # Represents a one
  11. zwj = "\u200d" # Zero width joiner
  12. #zwj = "a" # Zero width joiner
  13. # Represents a zero
  14. zwnj = "\u200c" # Zero width non-joiner
  15. #zwnj = "b" # Zero width non-joiner
  16.  
  17. message = ""
  18. for arg in argv[1:]:
  19.     message += arg + " "
  20. message = message[:-1]
  21. msg = ""
  22. for c in message:
  23.     if c in zwj or c in zwnj:
  24.         msg += c
  25. message = msg
  26. print("Zero width message (len {}): \"{}\"".format(len(message), message))
  27. msgBin = "".join(["1" if c in zwj else "0" for c in message])
  28. #print("Binary message: " + msgBin)
  29. origMsg = textFromBits(msgBin)
  30. print("Original message: " + origMsg)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement