YAMLException:不允许使用特殊字符

时间:2020-10-26 09:11:28

标签: java yaml

我试图读取yml文件并将其转换为对象以在yml文件中进行更改,但是在Linux服务器中使用ISO_8859_1进行转换时遇到以下异常。

例外:

const array: ElementArray = [
    {
        id: 'cars',
        options: [
            {
                label: 'One',
                value: 1,
            },
            {
                label: 'Two',
                value: 2,
            }
        ] as {
    label: string
    value: number
}[]
    },
    {
        id: 'year',
        options: [
            {
                label: '70',
                value: '1970',
            },
            {
                label: 'Unknown',
                value: null,
            }
        ] as {
    label: string
    value: null | string
}[]
    }
]

代码提取:

Caused by: unacceptable code point 'Â' (0x92) special characters are not allowed
in "'reader'", position 950
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:211)
        at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
        at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:136)
        at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1185)
        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:287)
        at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227)
        at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:558)
        at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158)
        at org.yaml.snakeyaml.parser.ParserImpl.getEvent(ParserImpl.java:168)
        at com.fasterxml.jackson.dataformat.yaml.YAMLParser.nextToken(YAMLParser.java:355)
        ... 43 more


com.fasterxml.jackson.dataformat.yaml.snakeyaml.error.YAMLException: special characters are not allowed
 at [Source: (StringReader); line: 165, column: 40]
        at com.fasterxml.jackson.dataformat.yaml.snakeyaml.error.YAMLException.from(YAMLException.java:25)
        at com.fasterxml.jackson.dataformat.yaml.YAMLParser.nextToken(YAMLParser.java:361)
        at com.fasterxml.jackson.core.JsonParser.nextFieldName(JsonParser.java:825)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapObject(UntypedObjectDeserializer.java:896)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:654)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapObject(UntypedObjectDeserializer.java:895)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:654)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapObject(UntypedObjectDeserializer.java:871)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:654)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.mapObject(UntypedObjectDeserializer.java:895)
        at com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer$Vanilla.deserialize(UntypedObjectDeserializer.java:654)
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4014)
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3005)

Yaml内容:

StringBuilder contentBuilder = new StringBuilder();
String originalFile = "..path";
try (Stream<String> stream = java.nio.file.Files.lines(Paths.get(originalFile), StandardCharsets.ISO_8859_1)) {
            stream.forEach(s -> contentBuilder.append(s).append("\n"));
        }
        
        Object obj = yamlReader.readValue(contentBuilder.toString(), Object.class); 

根据请求添加了Yaml内容以及异常详细信息和代码提取。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以看到herehere,此代码点对应于Windows-1252中的右引号字符,可能是因为该文件是在Windows系统中编辑的。

如异常所示,此代码点不受iso-8859-1或utf-8支持:请参见this page,以比较每种编码如何支持此字符和其他字符。 / p>

要解决您的问题,只需编辑文件并将其保存在iso-8859-1或utf-8编码中,以替换此字符即可,它应该可以工作。查看您的YAML文件,很可能是问题与您的错误can’t中的不同message单词有关。

相关问题