开发日记:java -jar 报错 org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException

 运行java -jar报错,报错信息如下:

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:215)
        at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:173)
        at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:168)
        at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:123)
        at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1204)
        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:320)
        at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:238)
        at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:210)
        at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:161)
        at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:152)
        at org.yaml.snakeyaml.composer.Composer.checkNode(Composer.java:109)
        at org.yaml.snakeyaml.constructor.BaseConstructor.checkData(BaseConstructor.java:149)
        at org.yaml.snakeyaml.Yaml$1.hasNext(Yaml.java:510)
        at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:203)
        at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:169)
        at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:84)
        at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
        at com.alibaba.cloud.nacos.parser.NacosDataParserHandler.parseNacosData(NacosDataParserHandler.java:92)
        at com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder.loadNacosData(NacosPropertySourceBuilder.java:107)
        at com.alibaba.cloud.nacos.client.NacosPropertySourceBuilder.build(NacosPropertySourceBuilder.java:74)
        at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.loadNacosPropertySource(NacosPropertySourceLocator.java:199)
        at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.loadNacosDataIfPresent(NacosPropertySourceLocator.java:186)
        at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.loadApplicationConfiguration(NacosPropertySourceLocator.java:149)
        at com.alibaba.cloud.nacos.client.NacosPropertySourceLocator.locate(NacosPropertySourceLocator.java:103)
        at org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:50)
        at org.springframework.cloud.bootstrap.config.PropertySourceLocator.locateCollection(PropertySourceLocator.java:46)
        at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.doInitialize(PropertySourceBootstrapConfiguration.java:120)
        at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:110)
        at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:627)
        at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:401)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
        at com.hxunt.api.IszMiniAppApiApplication.main(IszMiniAppApiApplication.java:26)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:91)
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:53)
        at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:58)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
        at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
        at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
        at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
        at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
        at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:118)
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:180)
        ... 40 common frames omitted

 错误分析:

1.错误来源:

  • 错误发生在 org.yaml.snakeyaml.reader.StreamReader.update 方法中。
  • 具体原因是 java.nio.charset.MalformedInputException,表示输入数据的编码格式不正确。

2.可能的原因:

  • YAML 文件的内容存在非 UTF-8 编码字符。
  • 文件中可能存在隐藏的非法字符(如 BOM 字符)。
  •  配置文件的编码与程序预期的编码不一致。

3.关键点:

  • Spring Boot 使用 SnakeYAML 解析 YAML 文件时,默认假设文件是 UTF-8 编码。
  • 如果文件包含其他编码(如 GBK 或 ISO-8859-1),会导致解析失败。

解决方案:

1.检查 YAML 文件编码:

  • 确保 YAML 文件保存为 UTF-8 编码,且没有 BOM(Byte Order Mark)。
  • 使用文本编辑器(如 VSCode、Notepad++)打开文件,选择“另存为”并设置编码为 UTF-8。

2.检查文件内容:

  • 查看 YAML 文件中是否存在非法字符或特殊符号。
  • 删除多余的空格或换行符,确保格式符合 YAML 规范。

3.强制指定编码:

  • 如果无法修改文件编码,可以在程序中强制指定编码为 UTF-8。例如,在 Spring Boot 中添加以下配置:
spring.cloud.nacos.config.encoder=utf-8
  • 或者在cmd启动方式中,在启动参数中指定 JVM 编码:
java -Dfile.encoding=UTF-8 -jar your-application.jar

4.验证 Nacos 配置:

  • 如果 YAML 文件是从 Nacos 拉取的配置,确保 Nacos 中存储的配置也是 UTF-8 编码。
  • 检查 Nacos 配置的 Data ID 和 Group 是否正确。

5.调试日志:

  • 启用调试日志以定位问题:
logging.level.org.springframework.boot.env=DEBUG
logging.level.com.alibaba.cloud.nacos=DEBUG

总结

        该问题通常是由于 YAML 文件编码不正确或文件中存在非法字符导致的。建议按照上述步骤逐一排查,优先确保文件编码为 UTF-8,并删除可能的非法字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值