Java判断txt编码格式
时间: 2023-07-08 13:24:12 浏览: 188
Java中可以通过以下方式判断txt文件的编码格式:
1. 通过BOM头判断
BOM(Byte Order Mark)是Unicode标准中用于表示字节顺序的标记,可以用于判断文件的编码格式。以下是通过BOM头判断txt文件编码格式的代码:
```java
public static String getCharsetByBOM(String fileName) throws IOException {
FileInputStream fis = new FileInputStream(fileName);
byte[] bom = new byte[4];
fis.read(bom, 0, bom.length);
fis.close();
if (bom[0] == (byte)0xEF && bom[1] == (byte)0xBB && bom[2] == (byte)0xBF) {
return "UTF-8";
} else if (bom[0] == (byte)0xFE && bom[1] == (byte)0xFF) {
return "UTF-16BE";
} else if (bom[0] == (byte)0xFF && bom[1] == (byte)0xFE) {
return "UTF-16LE";
} else if (bom[0] == (byte)0 && bom[1] == (byte)0 && bom[2] == (byte)0xFE && bom[3] == (byte)0xFF) {
return "UTF-32BE";
} else if (bom[0] == (byte)0xFF && bom[1] == (byte)0xFE && bom[2] == (byte)0 && bom[3] == (byte)0) {
return "UTF-32LE";
} else {
return "GBK";
}
}
```
2. 通过内容判断
如果文件没有BOM头,则可以通过文件内容来判断编码格式。以下是通过内容判断txt文件编码格式的代码:
```java
public static String getCharsetByContent(String fileName) throws IOException {
FileInputStream fis = new FileInputStream(fileName);
byte[] content = new byte[1024];
fis.read(content, 0, content.length);
fis.close();
String str = new String(content);
if (str.contains("大")) {
return "UTF-8";
} else if (str.contains("界")) {
return "GBK";
} else {
return null;
}
}
```
这里假设UTF-8编码下的"大"字和GBK编码下的"界"字都会出现在文件中,根据实际情况可以修改判断逻辑。其中,使用UTF-8编码读取文件内容的方式可以避免由于使用错误的编码格式而导致的乱码问题。
阅读全文