java中获取汉字字符串编码格式的一种可行方式

愚园 jiangnanyuzi的专栏 http://blog.csdn.net/jiangnanyuzi/archive/2008/01/31/2075459.aspx

近日被汉字乱码搞的晕头转向,研究了不少文章,自己的问题还没有最终解决,不过得到了一个副产品,找到了一个获取汉字字符串编码格式的可行方式:

String s = "汉字内容";   //这里的汉字内容可能是从其它途径获取的,不知晓其编码格式
String s1 = new String(s.getBytes(),"GBK");  //将汉字转换为GBK编码或其它编码
if(s1.equals(s)){
return "GBK";
}
s1 = new String(s.getBytes(),"UTF-8");
if(s1.equals(s)){
return "UTF-8";
}
//以此类推

通过比较原字符串和转换为新编码格式后的字符串是否相等,即可判断该字符串是否是这种编码格式。这种方法有点笨,等于是一个个编码格式去猜,在编码格式范围已知的情况下,可以一用

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用 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。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值