Как этот метод реализовать на java.
Нужен для того чтобы проверить кодировку файлов на битовом уровне.
Код:
unc ::IsUTF8(unc *cpt) { if (!cpt) return 0;
if ((*cpt & 0xF8) == 0xF0) { // start of 4-byte sequence
if (((*(cpt + 1) & 0xC0) == 0x80)
&& ((*(cpt + 2) & 0xC0) == 0x80)
&& ((*(cpt + 3) & 0xC0) == 0x80))
return 4;
}
else if ((*cpt & 0xF0) == 0xE0) { // start of 3-byte sequence
if (((*(cpt + 1) & 0xC0) == 0x80)
&& ((*(cpt + 2) & 0xC0) == 0x80))
return 3;
}
else if ((*cpt & 0xE0) == 0xC0) { // start of 2-byte sequence
if ((*(cpt + 1) & 0xC0) == 0x80)
return 2;
}
return 0;
}
Вопрос:
Как трансформировать этот метод в
Java code?
Ответ
постарался максимально облегчить вашу задачу:
// на счет значения не уверен, подставьте нужное
private static final int UTF8_HEADER_SIZE = 8 ;
public static boolean isUTF8 (String path) {
return isUTF8(new File(path)) ;
}
public static boolean isUTF8 ( File file ) {
// validate input
if (null == file) {
throw new IllegalArgumentException ("input file can't be null");
}
if (file.isDirectory ()) {
throw new IllegalArgumentException ("input file refers to a directory");
}
// read input file
byte [] buffer = new byte[UTF8_HEADER_SIZE];
try {
readBytes(file, buffer) ;
}
catch ( IOException e ) {
throw new IllegalArgumentException ("Can't read input file, error = " + e.getLocalizedMessage () );
}
// validate file header
// TODO: your validation goes here
// if (0xF0 == (buffer[0] & 0xF8) ) {
// }
return false ;
}
private static void readBytes ( File input, byte[] buffer ) throws IOException {
if (null == buffer || 0 == buffer.length) {
return;
}
// read data
FileInputStream fis = new FileInputStream ( input ) ;
fis.read ( buffer ) ;
fis.close ();
}
Комментариев нет:
Отправить комментарий