Java does not recognize initial BOM

Non lo sapevo ma quando l’ho saputo.. ci sono rimasto male..

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058

Incollo qui un piccolo metodino che riconosce il Byte Order Mark..

/**
* Metodo che esegue l'eventuale eliminazione del BOM(Byte Order Mark)
* @param bytes
* @return byte[]
*/
private byte[] deleteBOM(byte[] bytes) {

byte[] bytesNoBOM = null;
try {
// La codifica UTF-8 può presentare il BOM che deve essere eliminato
// per eseguire la validazione

if ((bytes[0] == (byte) 0x00) && (bytes[1] == (byte) 0x00) &&
    (bytes[2] == (byte) 0xFE) && (bytes[3] == (byte) 0xFF)) {
    System.out.println("Trovato BOM UTF-32BE");
    bytesNoBOM = new byte[bytes.length - 4];
    for (int i = 0; i < bytesNoBOM.length; i++) {
      bytesNoBOM[i] = bytes[i + 4];
    }

} else if ((bytes[0] == (byte) 0xFF) && (bytes[1] == (byte) 0xFE) &&
           (bytes[2] == (byte) 0x00)    && (bytes[3] == (byte) 0x00)) {
    System.out.println("Trovato BOM UTF-32LE");
    bytesNoBOM = new byte[bytes.length - 4];
    for (int i = 0; i < bytesNoBOM.length; i++) {
      bytesNoBOM[i] = bytes[i + 4];
    }

} else if ((bytes[0] == (byte) 0xEF) && (bytes[1] == (byte) 0xBB) &&
           (bytes[2] == (byte) 0xBF)) {
    System.out.println("Trovato BOM UTF-8");
    bytesNoBOM = new byte[bytes.length - 3];
    for (int i = 0; i < bytesNoBOM.length; i++) {
      bytesNoBOM[i] = bytes[i + 3];
    }
} else if ((bytes[0] == (byte) 0xFE) && (bytes[1] == (byte) 0xFF)) {
    System.out.println("Trovato BOM UTF-16BE");
    bytesNoBOM = new byte[bytes.length - 2];
    for (int i = 0; i < bytesNoBOM.length; i++) {
      bytesNoBOM[i] = bytes[i + 2];
    }
} else if ((bytes[0] == (byte) 0xFF) && (bytes[1] == (byte) 0xFE)) {
    System.out.println("Trovato BOM UTF-16LE");
    bytesNoBOM = new byte[bytes.length - 2];
    for (int i = 0; i < bytesNoBOM.length; i++) {
      bytesNoBOM[i] = bytes[i + 2];
    }
} else {
    System.out.println("No BOM founded");
    bytesNoBOM = bytes;
}
} catch (Exception e) {
    e.printStackTrace();
}
return bytesNoBOM;
}

Lascia un Commento