При загрузке арабских файлов в Spring, имя файла заканчивается XML-сущностями, а не арабскими глифами - PullRequest
0 голосов
/ 18 мая 2010

Я использую Spring upload для загрузки файлов. При загрузке арабского файла и получении исходного имени файла в контроллере, я получаю что-то вроде:

المغفلين.png

Я ожидаю, что это будет:

المغفلين. PNG

Есть идеи, почему возникает эта проблема?

Ответы [ 2 ]

0 голосов
/ 19 мая 2010

В этой кодировке нет ничего плохого.Это означает то же самое, что и имя, которое вы ему дали.

В соответствии со стандартом XML ссылки на символы могут иметь вид #&n;, где n - десятичное число ([0-9]+) или шестнадцатеричное (x[0-9a-fA-F]+) число, обозначающее кодовую точку Unicode представленного символа.Таким образом, имя файла в вашем вопросе является допустимым XML.

В вашем случае первый символ ا (эквивалентный &#x0627) представляет символ Unicode с десятичной кодовой точкой 1575, обычно представляемой в шестнадцатеричном виде как U +0627.Эта кодовая точка описывается как арабская буква «alef».

Символы кодируются слева направо, даже если кодируются арабские (справа налево) символы, поэтому «alef»находится слева от имени файла ASCII.Это зависит от механизма рендеринга (что бы это ни было) для рендеринга строки как RTL.

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

0 голосов
/ 18 мая 2010

Вероятно, Spring преобразовал символы Юникода (по крайней мере, символы, отличные от ISO-8859-1) в объекты XML. Это поведение должно быть настроено где-то в настройках Spring (или в веб-среде MVC, которую вы на самом деле используете в сочетании с Spring, но о которой не упоминали). Так как я не делаю Spring, я не могу подробно рассказать о настройке этого.

Но если вы не можете понять это навсегда, тогда вы можете использовать Apache Commons Lang StringEscapeUtils#unescapeXml(), чтобы вручную вывести XML-сущности в настоящие арабские символы. 1008 *

String realFilename = StringEscapeUtils.unescapeXml(escapedFilename);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...