PC端获取批注的时候没有问题,但是到了移动端会出现乱码?
查看了网上的资料大部分说的是获取Message的值。
方法一:原本获取的是getFullMessage(),将其修改为getMessage();
Comment类不提供getMessage()的方法,只有getFulMessage()方法,但是Comment是个接口类,具体实现是CommentEntity类,CommentEntity类提供了getMessage()方法,将类进行转换后就可以正常获取到了
List<Comment> list = findCommentByProcessInstanceId(processInstanceId);
for (Comment commentEntity : list) {
CommentEntityImpl comment = null;
if(commentEntity instanceof CommentEntityImpl){
comment = (CommentEntityImpl)commentEntity;
}
String message = comment.getMessage();
但是查看源码发现这个方法不是通用的还是有问题的。
添加批注的时候调用这个方法
Comment addComment(String taskId, String processInstanceId, String message);
在AddCommentCmd类中发现问题:
String eventMessage = message.replaceAll("\\s+", " ");
if (eventMessage.length() > 163) {
eventMessage = eventMessage.substring(0, 160) + "...";
}
comment.setMessage(eventMessage);
comment.setFullMessage(message);
也就是说message 批注中的长度超过163会被截取,导致内容不完整。如果批注过多的还是得选择获取FullMessage中的数据。FullMessage中的数据才是完整的。
方法二.查看数据库 act_hi_comment 表中的字段类型 发现 message 是varchar,而 fullmessage 是 longblob 类型。
也就是说getFullMessage会跟随部署的系统编码,保存到数据库中的blob字段可能会出现乱码。
那么针对这个情况我们需要在本地起的时候需要设置编码格式
chcp 65001
java -jar -Dfile.encoding=utf-8 E:\xxxxxxxx.jar –spring.profiles.active=test
至此pc端和移动端中文显示乱码问题就解决了。
以下是常用的cmd编码
字符编码 | 对应字符 |
---|---|
GBK(默认) | 936 |
美国英语 | 437 |
utf-8 | 65001 |