How to Use UTF-8 with Python
evanjones.ca
evanjones.ca
[1] http://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-... [2] http://docs.python.org/release/3.0.1/howto/unicode.html
One of my favorite things about Python 3 is its new string handling. It is fantastic and marginally more intuitive. Having an explicit (and a more general) immutable `bytes` class, no longer sharing a base class with `unicode`, and having Unicode instead of a potentially-encoded string as the default are all wonderful decisions and moves Python forward by miles in my opinion.
Until Python 3 becomes the norm, we're still stuck with the confusing `str` and `unicode` constructs.
Also, I think http://docs.python.org/howto/unicode.html may be a better reference than this article.
$ python3
Python 3.2.2 (default, Nov 21 2011, 05:01:42)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>> print('hello world') # <-- Unicode!# -- coding: utf-8 --
Does Python actually parse comments, or is this just to get your editor to do the right thing?
# -*- coding: latin-1 -*-
The syntax is inspired by Emacs’s notation for specifying variables local to a file. Emacs supports many different variables, but Python only supports ‘coding’. The dash-splat-dash symbols indicate to Emacs that the comment is special; they have no significance to Python but are a convention. Python looks for coding: name or coding=name in the comment. # vim: set fileencoding=utf-8
http://www.python.org/dev/peps/pep-0263/ def utf8(value):
if isinstance(value, unicode):
return value.encode("utf-8")
assert isinstance(value, str)
return value
def _unicode(value):
if isinstance(value, str):
return value.decode("utf-8")
assert isinstance(value, unicode)
return value