【Spring之轨迹】SpringBoot 项目启动时,报错 java.nio.charset.MalformedInputException: Input length = 1

本文讲述了作者在微调项目后遭遇YAML配置错误,解决过程揭示了因文件编码改变导致的问题,以及如何通过编辑设置找到并修复这一问题。

在一个夜黑风高的晚上,我兴起而走,缓缓缓缓。
突然!就掉坑里了。嗯??嗯???
Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
at org.yaml.snakeyaml.reader.StreamReader.(StreamReader.java:60)
at org.yaml.snakeyaml.Yaml.loadAll(Yaml.java:463)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:160)
at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:138)

在对项目进行微调后,启动时便抛出了这个错误
反复确认了修改的代码已经没有问题后,我想起了在打开时,yml 配置文件乱码的情况
看到 idea 的提示,我顺手就点击了更换编码,看着乱码消失也没觉得什么不对劲

但恰恰是因为改了配置文件的编码,不再是 UTF-8 ,在启动时就报这个错误了
接下来做法就很简单了,更改回配置文件编码为 UTF-8,然后如果看乱码不爽,就换掉叭
嘛,其实很好奇这个为什么回突然乱码变成 GBK 格式,往后再慢慢看

步骤如下:

坐标:File --> Settings --> Editor --> File Encodings
(果然变成 GBK 了)
把它改成 UTF-8 应用,就好了
在这里插入图片描述

这可能就是程序中的蝴蝶效应吧,看似不经意的一个操作,导致后面 debug 的时候,死活没办法发现是这里出问题了,反复去世哎。


`java.nio.charset.MalformedInputException` 是一个在字符集解码过程中,如果输入的数据不符合指定字符集的编码规则时抛出的异常。`Input length` 表示在解码过程中,遇到不符合编码规则的输入数据的长度。 `Input length = 1` 意味着在解码时,遇到了单个字节的数据不符合指定字符集的编码规则。例如,在使用 UTF - 8 编码时,一个单字节的数据可能被错误地放置在了一个多字节字符编码序列的位置,或者它本身就不是一个有效的 UTF - 8 单字节字符(UTF - 8 单字节字符范围是 0x00 - 0x7F)。在引用中提到的启动 Spring Boot 时出现 `Input length = 1` 的错误,可能是 `application.yml` 文件中的某个单字节字符在解码时出现了问题,导致无法正确加载该配置文件 [^1]。 `Input length = 3` 则表示遇到了连续的三个字节的数据不符合指定字符集的编码规则。在 UTF - 8 编码中,一个字符可能由 1 到 4 个字节表示,当出现 `Input length = 3` 时,可能是这三个字节组成的序列不是一个有效的 UTF - 8 字符编码。例如,UTF - 8 中某些多字节字符有特定的字节组合规则,如果这三个字节的组合不符合这些规则,就会抛出该异常。 总的来说,`Input length` 的值反映了在解码过程中遇到不符合编码规则的连续字节的数量,不同的值代表了不同长度的错误输入数据,这有助于定位具体是哪些字节在解码时出现了问题。 ```java import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; public class CharsetExceptionExample { public static void main(String[] args) { try { // 尝试读取文件,如果文件内容编码有误,可能会抛出 MalformedInputException Files.readAllLines(Paths.get("path/to/your/file.txt"), StandardCharsets.UTF_8); } catch (java.nio.charset.MalformedInputException e) { System.out.println("Malformed input: " + e.getInputLength()); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寒冰小澈IceClean

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

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

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

打赏作者

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

抵扣说明:

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

余额充值