[Mailman-Users] UnicodeDecodeError accessing into web admin interface

Mark Sapiro mark at msapiro.net
Tue Nov 25 04:25:14 CET 2014

On 11/24/2014 05:15 PM, Ferriol wrote:
> El 24/11/14 a les 21:10, Mark Sapiro ha escrit:
>> This is probably an English language list so it's Mailman character set
>> is us-ascii, and there is something (?) that has non-ascii, probably
>> utf-8 because 0xc3 is a utf-8 leadin, encoded text.
>> Finding exactly what is problematic.
>> The additional Python and environment information from the above error
>> log entry may help.
> This is not an English list but uses a latin alphabet is in Catalan that
> uses tittles and is latin_1 encoding

Is the lists' preferred_language Catalan or English (USA)?

If it is Catalan, the web UI and all the i18n strings should be utf-8
encoded and you shouldn't be seeing this issue.

Or are you saying that the lists preferred_language is English (USA),
but you are entering latin_1 encoded text in the various fields in the
web UI or via config_list?

In any case, we shouldn't be throwing exceptions, even if you are
entering non-ascii in an English list. I'll look into this further.

> Some full log entries below


>> And the full traceback from this may help too.
> $  config_list -o config listname
> Traceback (most recent call last):
>   File "/usr/sbin/config_list", line 362, in <module>
>     main()
>   File "/usr/sbin/config_list", line 355, in main
>     do_output(listname, outfile)
>   File "/usr/sbin/config_list", line 128, in do_output
>     do_list_categories(mlist, k, None, outfp)
>   File "/usr/sbin/config_list", line 198, in do_list_categories
>     outfp.write(NL.join(lines).replace('"', '\\"'))
> UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in
> position 9: ordinal not in range(128)

Unfortunately, that doesn't help too much, but thanks anyway.

>> Also, does this occur with all lists or only one?
> In 4 lists. In one on General options, topics and non-digest options,
> other one general options and non-digest options and the other two only
> in general options. May be has the same information in some value...
>>         output = unicode(output, errors='replace')
>>         for i in range(len(self.cells[row])):
>>             output = output + unicode(
>>                 self.FormatCell(row, i, indent + 2), errors='replace')
>>         output = output.encode(errors='replace')
> I tried this and doesn't work, this is the log entry:
> admin(27848):   File "/var/lib/mailman/Mailman/htmlformat.py", line 192,
> in FormatRow
> admin(27848):     output = output.encode(errors='replace')
> admin(27848): TypeError: encode() takes no keyword arguments

Sorry about that. The keyword argument errors='replace' requires Python
2.7. Anyway, you got the information another way.

>> Alternatively, you could replace the above two lines with
>>         from Mailman.Logging.Syslog import syslog
>>         try:
>>             for i in range(len(self.cells[row])):
>>                 output = output + self.FormatCell(row, i, indent + 2)
>>         except UnicodeDecodeError:
>>             syslog('error', 'UnicodeDecodeError: %s', output)
>> which should result in the problem bit being omitted from the page, and
>> Mailman's error log containing the html for the part of the page leading
>> up to the problem.
> This works perfect, with this I can find all values with rare characters.

OK. good.

> I'm reseting this values with config_list. I prepare a file with
> value='' p.ex.
> # -*- python -*-
> # -*- coding: utf-8 -*-
> info=''
> welcome_msg=''
> msg_footer=''
> topics=''
> and then I do config_list -i file listname
> Thanks, I solved the problem with your help ! Thanks for your work !

Thanks for the info you provided, and I'm glad you were able to find the
problem strings.

I will look into making Mailman behave more gracefully in cases like this.

Mark Sapiro <mark at msapiro.net>        The highway is for gamblers,
San Francisco Bay Area, California    better use your sense - B. Dylan

More information about the Mailman-Users mailing list