วันพฤหัสบดีที่ 30 กรกฎาคม พ.ศ. 2552

python encode decode hex string example

วันนี้ลองหยิบ code ในการเข้ารหัสตัวอักษร ไว้สำหรับทำงาน, ส่ง parameter
หรือใช้ทำอะไรอีกต่าง ๆ มามายให้ดูกันครับ

งานส่วนใหญ่ที่ใช้การ encode นี้ส่วนใหญ่จะใช้เพื่อแปลงภาษาไทย เป็นส่วนใหญ่
เนื่องจากภาษาไทยนั้น ไม่ใช่พื้นฐานของภาษาที่คอมพิวเตอร์จะถอดรหัสได้ทันที และ
มาตรฐานที่มากมายในการเข้าถึง และแปลงรหัส เพื่อให้ได้ ภาษาที่ถูกต้อง

ตัวอย่างเล็ก ๆ เอาไปลอง run แล้วพอจะเห็นภาพนะครับ ...

# -*- utf-8 -*-

def encode32(src):
    return ''.join(["%06x" % ord(x) for x in src])

def encode16(src):
    return ''.join(["%04x" % ord(x) for x in src])

def encode16char(src, ch='%'):
    return ''.join(['%(ch)s%(i)s%(ch)s%(j)s' %{'i':("%04x" % ord(x))[:2].upper(), 'j':("%04x" % ord(x))[2:].upper(), 'ch':ch}  for x in src])

def encode8(src):
    return ''.join(["%02x" % ord(x) for x in src])

def decode16(src):
    n = (len(src)+1)/4
    return "".join( [unichr(int(src[i*4:i*4+4],16)) for i in range(n)])

def isthaistr(s):
    try:
        s = s.decode('tis-620')
    except:
        pass
    return any( ord( c ) > 255 for c in s )

def encode8hexcharx(x, c='%'):
    if isthaistr(x):
        try:
            x = x.decode('tis-620')
        except Exception, e:
            pass
        x = x.encode('utf-8').encode('hex')
        return  '%(ch)s%(i)s%(ch)s%(j)s%(ch)s%(k)s' % {'i':x[:2].upper(), 'j':x[2:4].upper(), 'k':x[4:].upper(), 'ch':c}
    else:
        return x

def encode8hexchar(src, ch='%'):
    return ''.join([encode8hexcharx(x, c=ch) for x in src])

if '__main__' == __name__:
    a = '00740065007300740e010e020e03'
    s = decode16(a)
    print 'decode16 %s >> %s' % (a, s)
    a = s
    s = encode16char(a)
    print 'encode16char %s >> %s' % (a, s)
    a = u'abc กขค 123'
    s = encode8hex(unicode(a), ch='-')
    print 'encodeutf8hex %s >> %s' % (a, s)

ส่วนอันนี้ก็เป็น ผลที่ได้จาก test นะครับ

decode16 00740065007300740e010e020e03 >> testกขฃ

encode16char testกขฃ >> %74%65%73%74%0E%01%0E%02%0E%03

encodeutf8hex abc กขค 123 >> abc -E0-B8-81-E0-B8-82-E0-B8-84 123

ไม่มีความคิดเห็น: