title: Unicode vs UTF-8 confusion in Python / Django?
body: <p>I stumbled over this passage in the <a href="http://www.djangoproject.com/documentation/tutorial01/" rel="noreferrer">Django tutorial</a>:</p>
  
  <blockquote>
    <p>Django models have a default <strong>str</strong>() method that calls <strong>unicode</strong>() and converts the result to a UTF-8 bytestring. This means that unicode(p) will return a Unicode string, and str(p) will return a normal string, with characters encoded as UTF-8.</p>
  </blockquote>
  
  <p>Now, I'm confused because afaik Unicode is not any particular representation, so what is a "Unicode string" in Python? Does that mean UCS-2? Googling turned up <a href="http://www.reportlab.com/i18n/python_unicode_tutorial.html" rel="noreferrer">this "Python Unicode Tutorial"</a> which boldly states</p>
  
  <blockquote>
    <p>Unicode is a two-byte encoding which covers all of the world's common writing systems.</p>
  </blockquote>
  
  <p>which is plain wrong, or is it? I have been confused many times by character set and encoding issues, but here I'm quite sure that the documentation I'm reading is confused. Does anybody know what's going on in Python when it gives me a "Unicode string"?</p>