java获取字符串编码格式
时间: 2024-01-28 08:03:56 浏览: 109
可以使用 Java 的 `getBytes()` 方法获取字符串的编码格式,例如:
```java
String str = "你好,世界!";
byte[] bytes = str.getBytes();
String charset = "UTF-8"; // 默认编码格式为 UTF-8
if (bytes[0] == -17 && bytes[1] == -69 && bytes[2] == -65) {
charset = "UTF-8"; // UTF-8 编码格式的 BOM 头
} else if ((bytes[0] & 0xFF) == 0xFE && (bytes[1] & 0xFF) == 0xFF) {
charset = "UTF-16BE"; // UTF-16 大端编码格式的 BOM 头
} else if ((bytes[0] & 0xFF) == 0xFF && (bytes[1] & 0xFF) == 0xFE) {
charset = "UTF-16LE"; // UTF-16 小端编码格式的 BOM 头
} else {
for (int i = 0; i < bytes.length; i++) {
if ((bytes[i] & 0xFF) <= 0x7F) { // ASCII 字符
continue;
} else if ((bytes[i] & 0xFF) >= 0xC0 && (bytes[i] & 0xFF) <= 0xDF && i + 1 < bytes.length) { // 双字节字符
if ((bytes[i + 1] & 0xFF) >= 0x80 && (bytes[i + 1] & 0xFF) <= 0xBF) {
i += 1;
charset = "GBK"; // GBK 编码格式
}
} else if ((bytes[i] & 0xFF) >= 0xE0 && (bytes[i] & 0xFF) <= 0xEF && i + 2 < bytes.length) { // 三字节字符
if ((bytes[i + 1] & 0xFF) >= 0x80 && (bytes[i + 1] & 0xFF) <= 0xBF && (bytes[i + 2] & 0xFF) >= 0x80 && (bytes[i + 2] & 0xFF) <= 0xBF) {
i += 2;
charset = "UTF-8"; // UTF-8 编码格式
}
} else if ((bytes[i] & 0xFF) >= 0xF0 && (bytes[i] & 0xFF) <= 0xF7 && i + 3 < bytes.length) { // 四字节字符
if ((bytes[i + 1] & 0xFF) >= 0x80 && (bytes[i + 1] & 0xFF) <= 0xBF && (bytes[i + 2] & 0xFF) >= 0x80 && (bytes[i + 2] & 0xFF) <= 0xBF && (bytes[i + 3] & 0xFF) >= 0x80 && (bytes[i + 3] & 0xFF) <= 0xBF) {
i += 3;
charset = "UTF-8"; // UTF-8 编码格式
}
} else {
charset = "GBK"; // 默认编码格式为 GBK
}
}
}
System.out.println("字符串的编码格式为:" + charset);
```
该代码通过判断字符串的 BOM 头和字符集区间来确定字符串的编码格式,其中支持的编码格式包括 UTF-8、UTF-16BE、UTF-16LE 和 GBK。如果字符串是 ASCII 字符,则默认编码格式为 UTF-8。
阅读全文