2012-07-18 9 views
5

मुझे इस से संबंधित कई प्रश्न दिखाई देते हैं लेकिन मैं समाधान का पता नहीं लगा सकता।UnicodeEncodeError: 'ascii' कोडेक स्थिति 1-4 में अक्षरों को एन्कोड नहीं कर सकता है: क्रमशः श्रेणी में नहीं है (128)

यह Django 1.4 और पायथन 2.7 पर है।

data एक शब्दकोश है जिसमें UTF8 वर्ण शामिल हैं।

render_to_response('application/app.html', data, context_instance=RequestContext(request))

खाका प्रदान की गई हो जाता है कि कि data से मूल्यों आउटपुट: इस लाइन देखें।

यह क्यों विस्फोट करता है और मैं इसे ठीक करने के लिए क्या कर सकता हूं?

EDIT: आसपास खोदने के बाद, data का हिस्सा lxml.objectify.ObjectifiedElement है। असल में एक एक्सएमएल तत्व जिसे सामान्य शब्दकोश की तरह पूछताछ की जा सकती है। u'\xae\u2020\xa5\xa8\u02c6\xf8'

यहाँ पूर्ण स्टैकट्रेस है:: मान है कि यह पैदा करता है इस तरह उचित यूनिकोड तार प्रतीत

File "/web/mysite/env/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 

File "/web/mysite/current/api/views.py", line 163, in invoice 
    return render_to_response('application/app.html', data, context_instance=RequestContext(request)) 

File "/web/mysite/env/lib/python2.7/site-packages/django/shortcuts/__init__.py", line 20, in render_to_response 
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/loader.py", line 176, in render_to_string 
    return t.render(context_instance) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 140, in render 
    return self._render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 134, in _render 
    return self.nodelist.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 823, in render 
    bit = self.render_node(node, context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 837, in render_node 
    return node.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/loader_tags.py", line 123, in render 
    return compiled_parent._render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 134, in _render 
    return self.nodelist.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 823, in render 
    bit = self.render_node(node, context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 837, in render_node 
    return node.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/loader_tags.py", line 62, in render 
    result = block.nodelist.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 823, in render 
    bit = self.render_node(node, context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 837, in render_node 
    return node.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/defaulttags.py", line 281, in render 
    return nodelist.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 823, in render 
    bit = self.render_node(node, context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 837, in render_node 
    return node.render(context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 880, in render 
    return _render_value_in_context(output, context) 

File "/web/mysite/env/lib/python2.7/site-packages/django/template/base.py", line 858, in _render_value_in_context 
    value = force_unicode(value) 

File "/web/mysite/env/lib/python2.7/site-packages/django/utils/encoding.py", line 74, in force_unicode 
    s = unicode(str(s), encoding, errors) 

UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-4: ordinal not in range(128) 
+0

फ़ाइल "/web/mysite/current/api/views.py", लाइन 163, चालान –

उत्तर

4

यह चाहिए नहीं UTF-8 वर्ण होता है; इसमें unicode एस होना चाहिए।

{'foo': u'bar'} 
+0

पकड़ लिया है। मैंने पाया कि डेटा में lxml.objectify.ObjectifiedDataElement है और कौन जानता है कि wtf उस के अंदर है। – Grocery

+0

ठीक है, कि lxml ऑब्जेक्ट में ऐसे गुण हैं जो एक निर्देश की तरह पहुंच योग्य हैं। सभी मान इस तरह यूनिकोड प्रतीत होते हैं: 'u' \ xae \ u2020 \ xa5 \ xa8 \ u02c6 \ xf8''। तो कोई सुराग क्या इसे उड़ा सकता है? – Grocery

+0

@ किराने का जवाब अगर आप अपने लिए काम करते हैं तो आप जवाब स्वीकार कर सकते हैं। – n611x007

0

lxml.objectify.ObjectifiedElement में मान वास्तव में यूनिकोड नहीं हैं। आप अपने ObjectifiedElement वस्तु के आसपास निम्नलिखित आवरण का उपयोग कर सकते हैं:

from lxml.objectify import ObjectifiedElement, StringElement 

class LxmlUnicodeWrapper(object): 
    """Avoids UnicodeEncodeError when using ObjectifiedElement in templates.""" 
    def __init__(self, xml): 
     self.xml = xml 

    def __getattribute__(self, name): 
     item = getattr(object.__getattribute__(self, "xml"), name) 
     if type(item) == ObjectifiedElement: 
      return LxmlUnicodeWrapper(item) 
     elif type(item) == StringElement: 
      return unicode(item) 
     else: 
      return item 

तो

def some_view(request): 
    return render_to_response(
     "some_template.html", 
     { 
      "xml_data": LxmlUnicodeWrapper(your_xml_object) 
     }, 
    ) 
संबंधित मुद्दे

 संबंधित मुद्दे