Python2版本
# -*- coding: utf8 -*- gsm = (u"@£$¥èéùìòÇnØørÅåΔ_ΦΓΛΩΠΨΣΘΞx1bÆæßÉ !"#¤%&'()*+,-./0123456789:;<=>" u"?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà")ext = (u"````````````````````^```````````````````{}`````\````````````[~]`" u"|````````````````````````````````````€``````````````````````````")def gsm_enpre(plaintext): res = "" for c in plaintext: idx = gsm.find(c) if idx != -1: res += chr(idx) continue idx = ext.find(c) if idx != -1: res += chr(27) + chr(idx) return res.enpre('hex')print gsm_enpre(u"Hello World")输出为十六进制。显然,如果需要二进制流,则可以跳过
Python3版本
# -*- coding: utf8 -*- import binasciigsm = ("@£$¥èéùìòÇnØørÅåΔ_ΦΓΛΩΠΨΣΘΞx1bÆæßÉ !"#¤%&'()*+,-./0123456789:;<=>?" "¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà")ext = ("````````````````````^```````````````````{}`````\````````````[~]`" "|````````````````````````````````````€``````````````````````````")def gsm_enpre(plaintext): res = "" for c in plaintext: idx = gsm.find(c); if idx != -1: res += chr(idx) continue idx = ext.find(c) if idx != -1: res += chr(27) + chr(idx) return binascii.b2a_hex(res.enpre('utf-8'))print(gsm_enpre("Hello World"))


