Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Ошибка при парсинге YAML файла

Ferrun

Активный участник
Баллы
63
Имя в Minecraft
b0mbovix
Плагин при первом запуске создает файл с конфигурацией и добавляет туда записи:
Код:
File conf = new File(getDataFolder(), "config.yml");
        if (!conf.exists()){
            try {
                conf.createNewFile();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            config = getConfig();
            config.set("server.info", "Server info");
            try {
                config.save(conf);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (!conf.exists()){
                buffText.append("[JoinPlugin] [ERROR] Missing 'config.yml'!").append("\n");
            }
        }
Дело все в том, что при чтении конфигурации из файла, например так:
Код:
config = getConfig();
        if (command.getName().equalsIgnoreCase("server")){
            if (args.length > 0){
                if (args[0].equalsIgnoreCase("info")){
                    sender.sendMessage(config.getString("server.info"));
                    return true;
                }
            }
        }
В игре текст выводится успешно, никаких ошибок не возникает, однако в консоли сервера ошибка:
Код:
[SEVERE] Cannot load configuration from stream
org.bukkit.configuration.InvalidConfigurationException: unacceptable character '?' (0xFFFD) special characters are not allowed
in "<string>", position 159
    at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55)
    at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:138)
    at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:202)
    at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:121)
    at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:111)
    at ru.ferrun.JoinPlugin.onCommand(JoinPlugin.java:65)
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:189)
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchCommand(CraftServer.java:523)
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchServerCommand(CraftServer.java:512)
    at net.minecraft.server.v1_5_R3.DedicatedServer.an(DedicatedServer.java:262)
    at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:227)
    at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)
    at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)
    at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
Caused by: unacceptable character '?' (0xFFFD) special characters are not allowed
in "<string>", position 159
    at org.yaml.snakeyaml.reader.StreamReader.checkPrintable(StreamReader.java:70)
    at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:50)
    at org.yaml.snakeyaml.Yaml.load(Yaml.java:399)
    at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:53)
    ... 14 more

Смысл ошибки понятен, вот только сам файл не содержит никаких посторонних символов, так собственно в чем проблема? Подскажите, пожалуйста.
 
Плагин при первом запуске создает файл с конфигурацией и добавляет туда записи:
Код:
File conf = new File(getDataFolder(), "config.yml");
        if (!conf.exists()){
            try {
                conf.createNewFile();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            config = getConfig();
            config.set("server.info", "Server info");
            try {
                config.save(conf);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (!conf.exists()){
                buffText.append("[JoinPlugin] [ERROR] Missing 'config.yml'!").append("\n");
            }
        }
Дело все в том, что при чтении конфигурации из файла, например так:
Код:
config = getConfig();
        if (command.getName().equalsIgnoreCase("server")){
            if (args.length > 0){
                if (args[0].equalsIgnoreCase("info")){
                    sender.sendMessage(config.getString("server.info"));
                    return true;
                }
            }
        }
В игре текст выводится успешно, никаких ошибок не возникает, однако в консоли сервера ошибка:
Код:
[SEVERE] Cannot load configuration from stream
org.bukkit.configuration.InvalidConfigurationException: unacceptable character '?' (0xFFFD) special characters are not allowed
in "<string>", position 159
    at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55)
    at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:138)
    at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:202)
    at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:121)
    at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:111)
    at ru.ferrun.JoinPlugin.onCommand(JoinPlugin.java:65)
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:189)
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchCommand(CraftServer.java:523)
    at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchServerCommand(CraftServer.java:512)
    at net.minecraft.server.v1_5_R3.DedicatedServer.an(DedicatedServer.java:262)
    at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:227)
    at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)
    at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)
    at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
Caused by: unacceptable character '?' (0xFFFD) special characters are not allowed
in "<string>", position 159
    at org.yaml.snakeyaml.reader.StreamReader.checkPrintable(StreamReader.java:70)
    at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:50)
    at org.yaml.snakeyaml.Yaml.load(Yaml.java:399)
    at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:53)
    ... 14 more

Смысл ошибки понятен, вот только сам файл не содержит никаких посторонних символов, так собственно в чем проблема? Подскажите, пожалуйста.

Ну во 1, config.yml не надо создавать в коде, он автоматически это сделает.
 
Ну во 1, config.yml не надо создавать в коде, он автоматически это сделает.
Спасибо, но я ведь вопрос по другой теме создал, почему бы не ответить именно на него? )
А файл я и заранее пробовал создавать, а тут это написано уже из-за безысходности, вдруг бы заработало.
 
Кодировку файла упорол, но как?
Да тоже были мысли по кодировке. Но пробовал и пересохранять и просматривать через редакторы с просмотром скрытых символов, все в порядке вроде.

Сейчас изменил код c:
Код:
    FileConfiguration config = getConfig();

На вот такой вот:
Код:
    final File conf = new File(getDataFolder(), "config.yml");
    final FileConfiguration config = YamlConfiguration.loadConfiguration(conf);

И собственно ошибка такая больше не появляется.
Как я понимаю проблема была в моих кривых руках и незнании java? )

------

Минус только в том, что он файл config.yml создает в корне сервера :confused:

ADD: все, добавляется куда нужно ) Это я не там команду прописал.
 
Неадекват ?
я в ведре только 3 дня
и просто у меня проблема такая !

Этот раздел про разработку плагинов. А ошибка "Caused by: unacceptable character '?' (0xFFFD) special characters are not allowed in <string>, position 159" говорит о том, что плагин не принимает символ в указанной кодировке.
Нужно всё приводить к UTF8 - и консоль и файлы. Это мое мнение, кому-то может другие кодировки нравятся ;)
 
Этот раздел про разработку плагинов. А ошибка "Caused by: unacceptable character '?' (0xFFFD) special characters are not allowed in <string>, position 159" говорит о том, что плагин не принимает символ в указанной кодировке.
Нужно всё приводить к UTF8 - и консоль и файлы. Это мое мнение, кому-то может другие кодировки нравятся ;)
Тут как раз таки в Bukkit дело. FileConfiguration и YamlConfiguration по разному загружают конфиг.
 
Тут как раз таки в Bukkit дело. FileConfiguration и YamlConfiguration по разному загружают конфиг.

Если говорить о конечном методах "load", то они одни и те же. В смысле, что YamlConfiguration наследует эти методы от FileConfiguration и не переопределяет их.

Вообще, по спецификации формат yml, - это по определению Unicode (т.е. UTF8 или UTF16), однако в bukkit файл будет в той кодировке, которая указана для работы с файлами (параметр -Dfile.encoding=UTF8). На мой взгляд, было бы логичнее (правильнее, удобнее) если для yml файлов вне зависимости от кодировки использовался бы UTF8. Делал как-то тикет, но видно разработчики не прониклись ;)
 

Поделиться этой страницей

Назад
Верх