Fredrik Lundh is sharing code with you

Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.

Don't show this again

effbot / cjson-effbot

Various cjson tweaks, including byte string encoding support.

Clone this repository (size: 34.3 KB): HTTPS / SSH
hg clone https://bitbucket.org/effbot/cjson-effbot
hg clone ssh://hg@bitbucket.org/effbot/cjson-effbot

cjson-effbot / test_encoding.py

Branch
default
import cjson

import sys
reload(sys)

encoding = sys.getdefaultencoding()
print encoding

campus = u'\u5927\u5b66\u6821\u56ed'
campus_utf8 = campus.encode("utf-8")

# ascii tests
sys.setdefaultencoding("ascii")
print cjson.encode([campus])
print cjson.encode([campus_utf8])

sys.setdefaultencoding("iso-8859-1")
print cjson.encode([campus])
print cjson.encode([campus_utf8])

sys.setdefaultencoding("utf8")
print cjson.encode([campus])
print cjson.encode([campus_utf8])

sys.setdefaultencoding("utf-8")
print cjson.encode([campus])
print cjson.encode([campus_utf8])

print "roundtrip testing"
for i in range(0xd800) + range(0xe000, 0xffff):
  ch1 = unichr(i)
  ch2 = cjson.decode(cjson.encode(ch1.encode("utf-8")))
  if ch1 != ch2:
    print repr(ch1), "!=", repr(ch2)

print "invalid characters"
for i in range(0x100):
  ch1 = chr(i).decode("utf-8", "replace")
  ch2 = cjson.decode(cjson.encode(chr(i)))
  if ch1 != ch2:
    print repr(ch1), "!=", repr(ch2)

# restore, just to be nice :)
sys.setdefaultencoding(encoding)