Скорее всего, текст поврежден, когда вы отправляете его из формы или отображаете его в HTML, а не когда он сохраняется (или извлекается).
В качестве быстрого теста попробуйте это:
String test = "\u0627\u0644\u0633\u0644\u0627\u0645";
PersistenceManager manager = PMF.get().getPersistenceManager();
Category category = new Category(test);
manager.makePersistent(category);
manager.refresh(category);
manager.close();
Если это отображается правильно (السلام
), то проблема в том, как обрабатывается ввод на пути в приложение. Если он по-прежнему поврежден, попробуйте другой тест, в котором вы получите имя категории, и в вашем приложении сравните его с исходным значением test
. Тест может выглядеть примерно так:
boolean okay = "\u0627\u0644\u0633\u0644\u0627\u0645".equals(category.getName());
Записать (или отобразить) значение okay
. Если false
, то это действительно слой постоянства, который не может обрабатывать арабский язык. Опубликуйте свои выводы, и мы позаботимся о решении, когда будем более уверены в том, в чем действительно проблема.
Обновление: Механизм сервлета не гарантированно распознает кодировку символов, если вы установите ее с помощью setHeader()
. Вместо этого используйте метод setContentType()
или метод setCharacterEncoding()
.