[I18n-sig] Re: [Python-Dev] Unicode debate

Fredrik Lundh Fredrik Lundh" <effbot@telia.com
Tue, 2 May 2000 08:59:03 +0200

Neil Hodgson <nhodgson@bigpond.net.au> wrote:
>    I'm dropping in a bit late in this thread but can the current =
problem be
> summarised in an example as "how is 'literal' interpreted here"?
> s =3D aUnicodeStringFromSomewhere
> DoSomething(s + "<literal>")

nope.  the whole discussion centers around what happens
if you type:

    # example 1

    u =3D aUnicodeStringFromSomewhere
    s =3D an8bitStringFromSomewhere

    DoSomething(s + u)


    # example 2

    u =3D aUnicodeStringFromSomewhere
    s =3D an8bitStringFromSomewhere

    if len(u) + len(s) =3D=3D len(u + s):
        print "true"
        print "not true"

in Guido's design, the first example may or may not result in
an "UTF-8 decoding error: UTF-8 decoding error: unexpected
code byte" exception.  the second example may result in a
similar error, print "true", or print "not true", depending on the
contents of the 8-bit string.

(under the counter proposal, the first example will never
raise an exception, and the second will always print "true")


the string literal issue is a slightly different problem.

> The two options being that literal is either assumed to be encoded in
> Latin-1 or UTF-8. I can see some arguments for both sides.

better make that "two options", not "the two options" ;-)

a more flexible scheme would be to borrow the design from XML
(see http://www.w3.org/TR/1998/REC-xml-19980210). for those
who haven't looked closer at XML, it basically treats the source
file as an encoded unicode character stream, and does all pro-
cessing on the decoded side.

replace "entity" with "script file" in the following excerpts, and you
get close:

section 2.2:

    A parsed entity contains text, a sequence of characters,
    which may represent markup or character data.

    A character is an atomic unit of text as specified by
    ISO/IEC 10646.

section 4.3.3:

    Each external parsed entity in an XML document may
    use a different encoding for its characters. All XML
    processors must be able to read entities in either
    UTF-8 or UTF-16.=20

    Entities encoded in UTF-16 must begin with the Byte
    Order Mark /.../ XML processors must be able to use
    this character to differentiate between UTF-8 and
    UTF-16 encoded documents.

    Parsed entities which are stored in an encoding other
    than UTF-8 or UTF-16 must begin with a text declaration
    containing an encoding declaration.

(also see appendix F: Autodetection of Character Encodings)

I propose that we adopt a similar scheme for Python -- but not
in 1.6.  the current "dunno, so we just copy the characters" is
good enough for now...