Eclipse/PyDev - BOM Lexical Error
tjreedy at udel.edu
Tue Oct 5 22:40:36 CEST 2010
On 10/5/2010 5:13 AM, TheOne wrote:
>> It's a MS-specific thing that makes a file identifieable as
>> UTF-8-encoded under windows. The name BOM is obviously BS, but it's the
>> way it is.
> I didn't know that it's a MS-thing. (Is it really?)
Yes, who else would 'customize' an international standard by corrupting
it when adopting it. Sort of like animals pissing on things to mark them
Here is the relevant part of
"Byte order mark
Many Windows programs (including Windows Notepad) add the bytes 0xEF,
0xBB, 0xBF at the start of any document saved as UTF-8. This is the
UTF-8 encoding of the Unicode byte order mark (BOM), and is commonly
referred to as a UTF-8 BOM even though it is not relevant to byte order.
The BOM can also appear if another encoding with a BOM is translated to
UTF-8 without stripping it.
The presence of the UTF-8 BOM may cause interoperability problems with
existing software that could otherwise handle UTF-8, for example:
* Older text editors may display the BOM as "ï»¿" at the start of
the document, even if the UTF-8 file contains only ASCII and would
otherwise display correctly.
* Programming language parsers not explicitly designed for UTF-8
can often handle UTF-8 in string constants and comments, but cannot
parse the BOM at the start of the file.
* Programs that identify file types by leading characters may fail
to identify the file if a BOM is present even if the user of the file
could skip the BOM. Or conversely they will identify the file when the
user cannot handle the BOM. An example is the Unix shebang syntax.
* Programs that insert information at the start of a file will
result in a file with the BOM somewhere in the middle of it (this is
also a problem with the UTF-16 BOM). One example is offline browsers
that add the originating URL to the start of the file.
If compatibility with existing programs is not important, the BOM could
be used to identify if a file is UTF-8 versus a legacy encoding, but
this is still problematic due to many instances where the BOM is added
or removed without actually changing the encoding, or various encodings
are concatenated together. Checking if the text is valid UTF-8 is more
reliable than using BOM.
> Anyway, it would be great if I could make my eclipse/pydev to
> understand the BOM character and suppress the lexical error msg.
It IS an error for *decoded* unicode strings to contain the BOM
'character'. BOM is only intended for use in multibyte transfer
*encodings*. Its very illegality within text is what makes it useful for
its purpose. Exclipse understands that, hence
Eclipse/Pydev reports lexical error :
>> > Lexical error at line 1, column 1. Encountered: "\ufeff" (65279),
>> > after : ""
Python deals with this by having separate standard utf_8 and utf_8_sig
(nature) codecs for encoding and decoding:
>>> bom = bytes((0xEF, 0xBB, 0xBF))
So if you insist on mal-forming your files, you need to tell
eclipse/pydev to use the equivalent of the utf_8_sig codec.
Terry Jan Reedy
More information about the Python-list