3942: Rendering Markup fails depending on machine local

msunde
What version are you running?
2.0.18

What's the URL of the page containing the problem?
http://XXXXX/r/3342/

What steps will reproduce the problem?
1. Opening a review request gives an error.
2.
3.

What is the expected output? What do you see instead?

Review request should come up correctly.

What operating system are you using? What browser?

Windows, the local on the machine is set to: PT-BR

Please provide any additional information below.

Asking the user to turn off "Always use Markdown for text fields" seems to help and allows the page to come up correctly. I have noticed this with several different users. The stack trace for this particular user request is:

2015-08-12 13:06:04,998 - ERROR -  - Exception thrown for user XXXX at http://XXXXX/r/3342/

'ascii' codec can't decode byte 0xe1 in position 0: ordinal not in range(128)
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/core/handlers/base.py", line 112, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.6/site-packages/ReviewBoard-2.0.18-py2.6.egg/reviewboard/accounts/decorators.py", line 21, in _check
    return login_required(view_func)(*args, **kwargs)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/contrib/auth/decorators.py", line 22, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/usr/local/lib/python2.6/site-packages/ReviewBoard-2.0.18-py2.6.egg/reviewboard/site/decorators.py", line 35, in _check
    return view_func(request, local_site=local_site, *args, **kwargs)
  File "/usr/local/lib/python2.6/site-packages/ReviewBoard-2.0.18-py2.6.egg/reviewboard/reviews/views.py", line 721, in review_detail
    RequestContext(request, context_data))
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/shortcuts/__init__.py", line 29, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/loader.py", line 164, in render_to_string
    return t.render(Context(dictionary))
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 140, in render
    return self._render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 840, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 854, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/loader_tags.py", line 123, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 840, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 854, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/loader_tags.py", line 123, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 840, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 854, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 840, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 854, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/loader_tags.py", line 155, in render
    return self.render_template(self.template, context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/loader_tags.py", line 137, in render_template
    output = template.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 140, in render
    return self._render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 840, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 854, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/defaulttags.py", line 305, in render
    return nodelist.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 840, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/base.py", line 854, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.6/site-packages/Django-1.6.11-py2.6.egg/django/template/defaulttags.py", line 203, in render
    nodelist.append(node.render(context))
  File "/usr/local/lib/python2.6/site-packages/Djblets-0.8.21-py2.6.egg/djblets/util/decorators.py", line 122, in render
    return self.tag_func(context, *args)
  File "/usr/local/lib/python2.6/site-packages/ReviewBoard-2.0.18-py2.6.egg/reviewboard/reviews/templatetags/reviewtags.py", line 87, in file_attachment_comments
    comment.rich_text),
  File "/usr/local/lib/python2.6/site-packages/ReviewBoard-2.0.18-py2.6.egg/reviewboard/reviews/markdown_utils.py", line 172, in normalize_text_for_edit
    text = markdown_escape(text)
  File "/usr/local/lib/python2.6/site-packages/ReviewBoard-2.0.18-py2.6.egg/reviewboard/reviews/markdown_utils.py", line 105, in markdown_escape
    return ESCAPE_CHARS_RE.sub(_escape_matches, text)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 0: ordinal not in range(128)
david
#1 david

There's been a lot of work on unicode/bytes compatibility in 3.0 and beyond. 2.0.x is pretty old.

  • -New
    +Fixed