activiti工作流Comment中文乱码的问题

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-865001
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值