Yasuhito FUTATSUKI wrote on Thu, 07 May 2020 20:46 +0900: > I think it is need to escape characters in char *value when we print > them as Python's str value. The patch below may work for this purpose, > but I want someone to write more nice code :)
How about simply adding the human-readable value in a comment? — [[[ Index: subversion/tests/cmdline/entries-dump.c =================================================================== --- subversion/tests/cmdline/entries-dump.c (revision 1877310) +++ subversion/tests/cmdline/entries-dump.c (working copy) @@ -46,7 +46,23 @@ str_value(const char *name, const char *value) if (value == NULL) printf("e.%s = None\n", name); else - printf("e.%s = '%s'\n", name, value); + { + svn_stringbuf_t *escaped_value; + SVN_ERR(svn_xml_escape_attr_cstring(&escaped_value, value, pool)); + + /* Print the human-readable value. */ + assert(NULL == strchr(escaped_value->data, '\n')); + printf("# e.%s = %s\n", name, escaped_value->data); + + /* Print the machine-readable value. */ + printf("e.%s = (lambda x: x if isinstance(x, str) else " + "x.decode('utf-8', 'surrogateescape'))(b'", name); + while(*value) + { + printf("\\x%02x", (unsigned int)(unsigned char)*value++); + } + printf("')\n"); + } } ]]] Also, I propose to change the cast as above, because I think the previous one wouldn't DTRT on platforms where 'char' is signed. Cheers, Daniel