2019-02-27 18:46

是我字符串截取问题,比如“.......”,如果substring(0,5)就会截取到最后一个表情字符的一半,这样UTF-8编码会报错,只是java本身遇到这种情况不抛出来直接用一个“?”代替打印出来变成“....?”,我用subByUtf32上面那个方法不是改变编码方式,只是为了防止截取到一半的事情发生,会自动截取完整表情字符。

“.......”是表情字符,这里不能用表情字符,用的话就发送不了(不知道这个问题跟我的问题是不是一样的,存在表情字符只获取一半的问题),

2019-02-26 12:32

使用上面的方法后会报另一个错 java.nio.charset.MalformedInputException: Input length = 1

后面发现主要是字符串截取问题,表情符号会占用两个字符,String 截取时(String .substring(start,end),如果刚好截到表情符号的一个字符,而另一个字符没有截取进来,Enjoy会抛出,java本身的话不抛出,会直接用一个?代替。

修改字符串截取方式后,问题解决
private static String subByUtf32(String s, int reqNum) throws UnsupportedEncodingException{
byte[] bts = s.getBytes("utf-32");
int index = reqNum * 4;
index = index > bts.length ? bts.length : index;
return new String(bts, 0, index, "utf-32");
}