Java字符串的编码转换问题解决记录

项目场景:

在一些企业的老旧系统的数据库选用的字符集与现在开发的新系统所需的字符集有冲突时需要转换字符串的编码类型否则会出现乱码问题。

我的这个项目时基于原来老旧的维修工单系统开发新的移动端Java接口(老系统是使用php编写的),出现了数据乱码的现象。


问题描述:

老系统的数据库字符集是latin1,现在同过Java开发了接口,接口的返回值在前端显示的都是一堆乱码,前端要求我解决乱码问题,因为不能影响现在的业务,更不能丢失数据,所以数据库上的改动字符集是无法进行的,因此只能是在代码里进行编码的转换。


原因分析:

老系统的数据库字符集是latin1,老系统在数据库中存储的是gbk编码的的数据。


解决方案:

方法一:
这个方法比较笨,我在度娘参考了一些文档后使用了一个在SQL上进行编码转换的方法,直接在mybatis的mapper里编写SQL,不多说了,上代码:

SELECT 
CONVERT ( unhex( hex( CONVERT ( name USING latin1 ) ) ) USING gb2312 ) name
FROM users

通过这个sql可以在我这个项目的数据库中得到能正常显示的数据。

方法二:
方法一在我看来很笨,它会根据我们所需的数据库字段的增加,我们所编写的SQL代码的长度也将增加。
所以我找了这个方法二,它是通过使用java的Sting类的方法进行编码的转换操作,代码如下:

使用时转换编码:

User user = userRepository.selectByPrimaryKey(1);
user.setName(String.valueOf(user.getName()).getBytes("GB2312"));

直接在实体类的get方法中转换编码:


@Table(name = "users")
public class user{

 	@ApiModelProperty(value = "姓名")    
    private String name;
    
	public String getName() {
		return name.getBytes("GB2312");
	}

	public void setName(String name) {
		this.name= name;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廷赫斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值