复制代码代码如下:
สตริงคงที่สาธารณะ getCharSet (ไฟล์ไฟล์) {
String charset = "gbk";
ไบต์ [] first3bytes = byte ใหม่ [3];
พยายาม {
บูลีนตรวจสอบ = false;
bufferedInputStream bis = ใหม่ bufferedInputStream (
ใหม่ FileInputStream (ไฟล์));
bis.mark (0);
int read = bis.read (first3bytes, 0, 3);
ถ้า (อ่าน == -1)
คืนถ่าน;
if (first3bytes [0] == (byte) 0xff && first3bytes [1] == (byte) 0xfe) {
charset = "utf-16le";
ตรวจสอบ = จริง;
} อื่นถ้า (first3bytes [0] == (ไบต์) 0xfe && first3bytes [1]
== (ไบต์) 0xff) {
charset = "utf-16be";
ตรวจสอบ = จริง;
} อื่นถ้า (first3bytes [0] == (ไบต์) 0xef && first3bytes [1]
== (ไบต์) 0xbb
&& first3bytes [2] == (byte) 0xbf) {
charset = "utf-8";
ตรวจสอบ = จริง;
-
bis.reset ();
ถ้า (ตรวจสอบ) {
int loc = 0;
ในขณะที่ ((อ่าน = bis.read ())! = -1) {
LOC ++;
ถ้า (อ่าน> = 0xf0)
หยุดพัก;
// 单独出现 bf 以下的, 也算是 gbk
ถ้า (0x80 <= อ่าน && อ่าน <= 0xbf)
หยุดพัก;
if (0xc0 <= อ่าน && อ่าน <= 0xdf) {
อ่าน = bis.read ();
if (0x80 <= อ่าน && อ่าน <= 0xbf) // 双字节 (0xc0 - 0xdf)
// (0x80 -
// 0xbf), 也可能在 gb 编码内
ดำเนินการต่อ;
อื่น
หยุดพัก;
// 也有可能出错, 但是几率较小
} อื่นถ้า (0xe0 <= อ่าน && อ่าน <= 0xef) {
อ่าน = bis.read ();
if (0x80 <= อ่าน && อ่าน <= 0xbf) {
อ่าน = bis.read ();
if (0x80 <= อ่าน && อ่าน <= 0xbf) {
charset = "utf-8";
หยุดพัก;
} อื่น
หยุดพัก;
} อื่น
หยุดพัก;
-
-
System.out.println (loc + "" + integer.tohexstring (อ่าน));
-
bis.close ();
} catch (Exception e) {
E.PrintStackTrace ();
-
คืนถ่าน;
-