Java 字符集判断
Java 字符集判断
线上项目中有小票打印设备
小票打印的设备 没有做编码判断 小票机 只能打印GB2312的字符
java后台给出的字符又是UTF-8的 部分字符超过GB2312的范围了
百度了半天 关于Java的字符串 编码判断转换 都不能实现我所需要的效果
其实就是 判断 一下 字符是否超过 GB2312 超过就替换为 “□” 这样的方块
防止小票机出错就行了
但是 百度到的都是 编码转换
比如
String iso8859 = new String(sb.toString().getBytes(“iso8859-1”));
String gbk = new String(sb.toString().getBytes(“gbk”));
String utf8 = new String(sb.toString().getBytes(“utf-8”));
if(iso8859.equals(sb.toString())){
System.out.println(“iso8859”);
}else if(gbk.equals(sb.toString())){
System.out.println(“gbk”);
}else if(utf8.equals(sb.toString())){
System.out.println(“utf8”);
}
或者
return new String(str.getBytes(“ISO-8859-1”), “UTF-8”);
都无法准确的判断 或者转换字符串的编码
实际上得使用
Charset.canEncode
1 | public final static String toGB2312(final String s) { |
问题解决~
优化
GB2312 的字符太小了
很多商品其实是繁体字 是有对应的简体字的 虽然不多 但也聊胜于无吧
引入 https://github.com/program-in-chinese/zhconverter
其中的 “繁到简单字.properties” 改名为 “toSimple.properties”
1 | private final static ResourceBundle keyMap = ResourceBundle.getBundle("toSimple"); |
在返回给小票机的接口上添加
1 | try { |
搞定收工~