/* * gcc -o utf8 utf8.c -I/home/y/include -L./.libs -ljson */ #include #include #include "config.h" #include "json_inttypes.h" #include "json_object.h" #include "json_tokener.h" void print_hex( const char* s) { const char *iter = s; unsigned char ch; while ((ch = *iter++) != 0) { if( ',' != ch) printf("%x ", ch); else printf( ","); } printf("\n"); } int main() { const char *input = "\"\\ud840\\udd26,\\ud840\\udd27,\\ud800\\udd26,\\ud800\\udd27\""; const char *expected = "\xF0\xA0\x84\xA6,\xF0\xA0\x84\xA7,\xF0\x90\x84\xA6,\xF0\x90\x84\xA7"; struct json_object *parse_result = json_tokener_parse((char*)input); const char *unjson = json_object_get_string(parse_result); printf("input: %s\n", input); int strings_match = !strcmp( expected, unjson); int retval = 0; if (strings_match) { printf("JSON parse result is correct: %s\n", unjson); printf("PASS\n"); } else { printf("JSON parse result doesn't match expected string\n"); printf("expected string bytes: "); print_hex( expected); printf("parsed string bytes: "); print_hex( unjson); printf("FAIL\n"); retval = 1; } json_object_put(parse_result); return retval; }