[Python-Dev] Multibyte repr()

Guido van Rossum guido@python.org
Wed, 09 Oct 2002 16:13:43 -0400


> > revision 2.190
> > date: 2002/10/07 13:55:50;  author: loewis;  state: Exp;  lines: +68 -15
> > Patch #479898: Use multibyte C library for printing strings if available.
> > ----------------------------
> > 
> > Was this really a good idea???
> 
> I think the submitter wanted to get "proper" output in interactive
> mode for strings. For most cases, it might be sufficient to active the
> code for tp_print only, not for tp_repr.
> 
> Would that be better?

Not really, because then it would break the equivalence between repr()
and entering a value at the command line.  It would also cause
surprises because sometimes repr() is invoked anyway (when there's a
container that doesn't have a tp_print function).

I wouldn't mind this so much if GNU readline didn't do an evil thing
by calling setlocale().  Maybe the readline C extension  should
restore the locale?

This patch seems to take care of it, except I'm not sure if we can
assume that <locale.h> and setlocale() are always available.  This
doesn't seem to have any ill effects on the operation of GNU readline:

//////////////////////////////////////////////////////////////////////
*** readline.c	2 Aug 2002 02:27:13 -0000	2.52
--- readline.c	9 Oct 2002 20:10:33 -0000
***************
*** 11,16 ****
--- 11,17 ----
  #include <setjmp.h>
  #include <signal.h>
  #include <errno.h>
+ #include <locale.h>
  
  /* GNU readline definitions */
  #undef HAVE_CONFIG_H /* Else readline/chardefs.h includes strings.h */
***************
*** 538,543 ****
--- 539,545 ----
  static void
  setup_readline(void)
  {
+ 	char *saved_locale = NULL;
  	using_history();
  
  	rl_readline_name = "python";
***************
*** 570,576 ****
--- 572,580 ----
  	 * XXX: A bug in the readline-2.2 library causes a memory leak
  	 * inside this function.  Nothing we can do about it.
  	 */
+ 	saved_locale = setlocale(LC_CTYPE, NULL);
  	rl_initialize();
+ 	setlocale(LC_CTYPE, saved_locale); /* Restore locale */
  }
  
  
//////////////////////////////////////////////////////////////////////

--Guido van Rossum (home page: http://www.python.org/~guido/)