控制台乱码多方解决方案尝试以及json编码问题解决

文章讲述了在使用TemplateMethod模式设计学生体检数据分析程序时遇到的控制台乱码和JSON解析问题。作者分析了控制台乱码可能的原因,并尝试了多种解决方案,如修改文件编码、VMoptions设置等,最终发现是JSON数据本身的编码问题导致的。通过使用StandardCharsets.UTF_8解决JSON字符串到对象转换时的乱码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

基于Template Mothod模式设计一个学生体检分析程序,其主要需求如下:(1)学生的体检数据包括:肺活量、视力、体重、身高等;
(2)数据存储的形式有若干种,例如数据库、json格式文件等等;
(3)程序能够读取多种来源的体检数据并对数据进行分析统计,例如求算平均体重
与身高、评价学生体质健康情况等等。

其中记录关于解决控制台乱码的奇葩错误,以及从json文件中读取信息,存放入数据链表中,关于编码的错误。


问题描述

首先是控制台的乱码问题:它是下面这样
在这里插入图片描述

这样:
在这里插入图片描述
还有这样
在这里插入图片描述

在这里插入图片描述

@Override
	public void run() {
		bytes = mmInStream.read(buffer);
		mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
	}

原因分析与解决方案:

关于这种大面积的错误,我们首先想到的是编码错误,于是我在网上查找多方的博客以及经验贴,再在自己的摸索下逐一将问题慢慢解决。
关于控制台乱码问题:很多网上的都是改编码,也就是在文件->设置->文件编码里修改编码格式,但是这个也需要自己去摸索,统一所有utf-8编码并不适用所有情况,另外也有打开 Run --> Edit Configurations --> 选择文件
在 VM options 中加上 -Dfile.encoding=UTF-8(同样没有解决我的问题)
还有更换jdk版本(我尝试了一下感觉不是很容易,产生了很多其他错误,不过自己也可以尝试一下)
控制台乱码问题真的很令人头大,简单的乱码问题通过更改文件编码,在自己摸索下应该问题不大,不过更改后是选择中间的convert转换不是重新加载,然后重启一下(也可以不重启)差不多可以解决问题
像我这里
在这里插入图片描述
这是全改为utf-8的编码打印出的结果,将项目编码改为gbk后
在这里插入图片描述
打印结果正常了。不过有点小问题,这个小问题是出在导入json数据所导致的乱码问题。
看一下代码:

try {
            String jsonString = new String(Files.readAllBytes(jsonFile.toPath()));
            JSONArray jsonArray = new JSONArray(jsonString);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObj = jsonArray.getJSONObject(i);
                Student student=new Student();
                //主要就是name的问题
                student.setName(new String(jsonObj.getString("name").getBytes("gbk"),"utf-8"));
                student.setWeight(jsonObj.getDouble("weight"));
                student.setHeight(jsonObj.getDouble("height"));
                student.setVision(jsonObj.getDouble("vision"));
                student.setLungCapacity(jsonObj.getDouble("lungCapacity"));
                students.add(student);
            }
          

想不明白为啥最后一个字是??,其他字就能解析出来呢?我将json中的数据稍微改了改,
在这里插入图片描述
没想到打印出来的结果
在这里插入图片描述
果不其然,有三个字符以上,最后那个字符都解析成了??,百思不得奇解,毕竟也没学过关于json的数据导入,当我抱着死马当活马医,网上到处查资料时,发现:

 String jsonString = new String(Files.readAllBytes(jsonFile.toPath()),StandardCharsets.UTF_8);

这样就可以正常打印了:
在这里插入图片描述
关于具体原因放在这里:(咱也一知半解)
如果使用 new String(jsonObj.getString(“name”).getBytes(“gbk”), “utf-8”) 转化后仍然出现了乱码或不正确的字符,这可能是因为数据本身出现了编码问题,或者是因为读取数据时的编码方式不正确导致了数据的解析错误。(这里我也尝试了new String(jsonObj.getString(“name”).getBytes(“utf-8”), “utf-8”) 统一前后也是不行的,然后数据本身我觉得并没有多大的问题,读取数据时的编码方式不正确这说的有点抽象了我还是不太明白)

总之问题还是解决了,供大家参考与学习,如有大佬能指出问题所在,不胜感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叼馋爱偷猪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值