报错org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1

一.报错原因:

在使用SpringbootTest的时候,读取nacos的配置文件时,由于有中文,导致报错

报错信息:

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:254) ~[snakeyaml-1.19.jar!/:na]
        at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:58) ~[snakeyaml-1.19.jar!/:na]
        at org.yaml.snakeyaml.Yaml.loadAll(Yaml.java:537) ~[snakeyaml-1.19.jar!/:na]
        at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:166) ~[spring-beans-5.0.12.RELEASE.jar!/:5.0.12.RELEASE]
        at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:139) ~[spring-beans-5.0.12.RELEASE.jar!/:5.0.12.RELEASE]
        at org.springframework.beans.factory.config.YamlPropertiesFactoryBean.createProperties(YamlPropertiesFactoryBean.java:135) ~[spring-beans-5.0.12.RELEASE.jar!/:5.0.12.RELEASE]
        at org.springframework.beans.factory.config.YamlPropertiesFactoryBean.getObject(YamlPropertiesFactoryBean.java:115) ~[spring-beans-5.0.12.RELEASE.jar!/:5.0.12.RELEASE]
        at org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceBuilder.loadNacosData(NacosPropertySourceBuilder.java:100) [spring-cloud-alibaba-nacos-config-0.9.0.RELEASE.jar!/:0.9.0.RELEASE]
        at org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceBuilder.build(NacosPropertySourceBuilder.java:75) [spring-cloud-alibaba-nacos-config-0.9.0.RELEASE.jar!/:0.9.0.RELEASE]
        at org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator.loadNacosDataIfPresent(NacosPropertySourceLocator.java:179) [spring-cloud-alibaba-nacos-config-0.9.0.RELEASE.jar!/:0.9.0.RELEASE]
        at org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator.loadApplicationConfiguration(NacosPropertySourceLocator.java:155) [spring-cloud-alibaba-nacos-config-0.9.0.RELEASE.jar!/:0.9.0.RELEASE]
        at org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator.locate(NacosPropertySourceLocator.java:88) [spring-cloud-alibaba-nacos-config-0.9.0.RELEASE.jar!/:0.9.0.RELEASE]
        at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:94) [spring-cloud-context-2.0.0.RELEASE.jar!/:2.0.0.RELEASE]
        at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:628) [spring-boot-2.0.8.RELEASE.jar!/:2.0.8.RELEASE]
        at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:364) [spring-boot-2.0.8.RELEASE.jar!/:2.0.8.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:305) [spring-boot-2.0.8.RELEASE.jar!/:2.0.8.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242) [spring-boot-2.0.8.RELEASE.jar!/:2.0.8.RELEASE]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230) [spring-boot-2.0.8.RELEASE.jar!/:2.0.8.RELEASE]
        at com.tba.sc.gateway.GatewayApplication.main(GatewayApplication.java:15) [classes!/:1.0-SNAPSHOT]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_91]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_91]
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [tba-gateway.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [tba-gateway.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [tba-gateway.jar:1.0-SNAPSHOT]
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [tba-gateway.jar:1.0-SNAPSHOT]
Caused by: java.nio.charset.MalformedInputException: Input length = 1
        at java.nio.charset.CoderResult.throwException(Unknown Source) ~[na:1.8.0_91]
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[na:1.8.0_91]
        at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[na:1.8.0_91]
        at java.io.InputStreamReader.read(Unknown Source) ~[na:1.8.0_91]
        at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125) ~[snakeyaml-1.19.jar!/:na]
        at org.yaml.snakeyaml.reader.StreamReader.update(S

二.网上的参考方案

这个问题不确定是不是nacos的bug,报错原因是因为电脑系统的编码是GBK, 而文件采用UTF-8编码导致。
该问题一般window系统才会出现。
如何检查系统的编码:

在Windows平台下,进入DOS窗口,输入:chcp 
输出: 936,表示编码格式为GBK

解决方案(任选其一):
方案1: 修改你系统的默认编码
方案2: 在nacos中删除中文可以解决此问题
方案3: 在idea中启动项目时,因为 idea相关配置中设置UTF-8的文件编码格式file.encoding=utf-8。打包运行后,该设置需要手动指定,如下:

java  -D'file.encoding=utf-8' -jar .\lamp-gateway-server.jar 
或者
java  -Dfile.encoding=utf-8 -jar .\lamp-gateway-server.jar 

三.我的解决方案

3.1 在build.gradle中添加
tasks.named('test') {
    useJUnitPlatform()
    jvmArgs = ['-Dfile.encoding=UTF-8']
}
3.2在idea设置中修改

在这里插入图片描述

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐