commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Niall Pemberton (JIRA)" <j...@apache.org>
Subject [jira] Updated: (IO-178) BOMInputStream - an InputStream for detected and optionally excludeing an initial Byte Order mark
Date Sun, 03 Oct 2010 23:54:33 GMT

     [ https://issues.apache.org/jira/browse/IO-178?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Niall Pemberton updated IO-178:
-------------------------------

    Summary: BOMInputStream - an InputStream for detected and optionally excludeing an initial
Byte Order mark  (was: BOMExclusionInputStream - an InputStream for UTF-8 data that ignores
an initial Byte Order mark)

I have enhanced the functionality on this implementation from just excluding UTF-8 BOMs to
detecting and optionally excluding any BOM.

So for example you could configure it to detect either UTF-8, UTF-16BE or UTF-16LE BOMs and
then find out which BOM was found. Also whether the BOM is excluded or not is now configurable

So to detect and exclude a UTF-8 BOM:

{code}
BOMInputStream bomIn = new BOMInputStream(in);
if (bomIn.hasBOM()) {
    // has a UTF-8 BOM
}
{code}

So to detect and include a UTF-8 BOM:

{code}
boolean include = true;
BOMInputStream bomIn = new BOMInputStream(in, include);
if (bomIn.hasBOM()) {
    // has a UTF-8 BOM
}
{code}

So to detect and include a UTF-18BE or UTF-16LE BOMs:

{code}
BOMInputStream bomIn = new BOMInputStream(in, ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE);
if (bomIn.hasBOM() == false) {
    // No BOM found
} else if (bomIn.hasBOM(ByteOrderMark.UTF_16LE)) {
    // has a UTF-16LE BOM
} else if (bomIn.hasBOM(ByteOrderMark.UTF_16BE)) {
    // has a UTF-16BE BOM
}
{code}


> BOMInputStream - an InputStream for detected and optionally excludeing an initial Byte
Order mark
> -------------------------------------------------------------------------------------------------
>
>                 Key: IO-178
>                 URL: https://issues.apache.org/jira/browse/IO-178
>             Project: Commons IO
>          Issue Type: New Feature
>          Components: Streams/Writers
>    Affects Versions: 1.4
>            Reporter: Keith D Gregory
>            Assignee: Niall Pemberton
>            Priority: Minor
>             Fix For: 2.0
>
>         Attachments: BOMExclusionInputStream.java, BOMExclusionInputStream.patch, TestBOMExclusionInputStream.java
>
>
> Microsoft tools have the unpleasant habit of writing a byte order mark (the three-byte
sequence 0xEF 0xBB 0xBF) at the start of a UTF-8 encoded file.
> The CharsetDecoder supplied with the JDK does not simply discard these bytes, but instead
returns the BOM character (0xFEFF); see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6378911
for discussion on this.
> This makes life unpleasant for anyone who is processing text data, as the program must
look for this character and ignore it.
> The BOMExclusionInputStream class is a work-around: it recognizes the BOM at the start
of the stream, and skips over it.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message