Как правильно экранировать строку перед записью в Apache Commons PropertiesConfiguration? - PullRequest
1 голос
/ 20 июля 2010

У нас есть файл ".properties", некоторые значения которого сохраняются как JSON.Тем не менее, меня продолжают кусать специальные символы - org.json.JSONObject не слишком многословен в том, что заставляет его задыхаться, поэтому требуется вечность, чтобы понять, что я написал {"key":"this is a \"Value\""}, ноЯ читаю {"key":"this is a "Value""}.Очевидно, что последний даст парсерам JSON.Вместо того, чтобы совать это методом проб и ошибок, кто-нибудь может просто сказать мне правильный способ экранирования значения (которое в данном случае, конечно, является всей строкой JSON ...) перед передачей егокласс PropertiesConfiguration для записи в файл?

Ответы [ 2 ]

0 голосов
/ 23 июля 2010

Я думаю, что, возможно, нашел разъединение.Я думал, что у нас было что-то вроде

PropertiesConfiguration pc = new PropertiesConfiguration();
pc.addProperty("SomeKey",
  new JSONObject().put("Stuff", getUserInput()).toString());
pc.save(myWriter);

Теперь представьте, что пользователь вводит строку This is "Interesting"....Моя проблема возникает из-за того, что, хотя строка будет храниться с правильно экранированными кавычками, в файле свойств появится

SomeKey={\"SomeKey\":\"This is \"Interesting\"\"}

, что, конечно, ужасно сломано.Вот почему это происходило (я думаю).Вместо использования класса PropertiesConfiguration для создания файла свойств, как в приведенном выше идеальном коде, исходный код был больше похож на

myWriter.write(keyName + "=" +
  new JSONObject().put("Stuff", getUserInput()).toString());

, который, конечно, только экранирует пользовательский ввод для JSON, но больше не экранируетJSON для парсера свойств.Я не могу поклясться в этом без дополнительного тестирования, но похоже, что метод pc.AddProperty() будет избегать своих аргументов (снова), если это будет необходимо.

Конечный результат: я виноват, что предположил парня, который написалкод, над которым я работаю, использовал предоставленные ему API-интерфейсы, а не «изгой» и пытался создать необходимый формат напрямую.

0 голосов
/ 20 июля 2010

Обратная косая черта игнорируется в файлах свойств. Вам нужно использовать кодировку Unicode, например,

  "this is a \u005c"Value\u005c""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...