[Python-ideas] Add encoding attribute to bytes
Terry Reedy
tjreedy at udel.edu
Tue Nov 10 03:22:14 CET 2009
MRAB wrote:
> Terry Reedy wrote:
>> A Python interpreter has one encoding for floats, ints, and strings.
>> sys.float_info and sys.int_info give details about the first two.
>> although they are mostly invisible to user code. (I presume they are
>> attached to sys rather than float and int precisely because this.) A
>> couple of recent posts have discussed making the unicode encoding
>> (UCS2 v 4) both less visible and more discoverable to extensions.
>>
>> Bytes are nearly always an encoding of *something*, but the particular
>> encoding used is instance-specific. As Guido has said, the programmer
>> must keep track. But how? In an OO language, one obvious way is as an
>> attribute of the instance. That would be carried with the instance and
>> make it self-identifying.
>>
>> What I do not know if it is feasible to give an immutable instance of
>> a builtin class a mutable attribute slot. If it were, I think this
>> could make 3.x bytes easier and more transparent to use. When a string
>> is encoded to bytes, the attribute would be set. If it were then
>> pickled, the attribute would be stored with it and restored with it,
>> and less easily lost. If it were then decoded, the attribute would be
>> used. If it were sent to the net, the attribute would be used to set
>> the appropriate headers. The reverse process would apply from net to
>> bytes to (unicode) text.
>>
>> Bytes representing other types of data, such as nedia could also be
>> tagged, not just those representing text.
>>
>> This would be a proposal for 3.3 at the earliest. It would involved
>> revising stdlib modules, as appropriate, to use the new info.
>>
> You said "give an immutable instance of a builtin class a mutable
> attribute slot". Why would the slot be mutable?
As Stephen said, in case the info is initially missing or determined to
be erroneous.
> Surely if the attribute
> said that the bytes represented a certain type of data then you
> shouldn't be able to change it. ("The attribute says that the bytes are
> UTF-8, but I'm going to change it so that it says they are ISO-8859-1.")
> I think that the attribute should be immutable.
Encoding set by unicode.encode or a wrapper thereof is definitionally
correct and should not be changed. Encoding inferred by mimetype header
or file extension might be erroneous. I had in mind that the difference
might be indicated somehow: 'utf8' versus 'utf8?', for instance.
Terry Jan Reedy
More information about the Python-ideas
mailing list