我使用Spring上传文件。上传阿拉伯文件并在控制器中获取原始文件名时,我得到的结果如下:
المغفلين.png
我希望它是:
المغفلين。PNG
为什么会出现此问题?
答案 0 :(得分:0)
可能是Spring将Unicode字符(至少是非ISO-8859-1字符)转换为XML实体。此行为必须可以在Spring设置中的某个位置(或者您实际使用的基于Web的MVC框架与Spring结合但未提及的那些)进行配置。由于我不做Spring,所以我不能详细介绍如何配置它。
但如果您无法永远记住它,那么您可以考虑使用Apache Commons Lang StringEscapeUtils#unescapeXml()
手动将XML实体转换为真正的阿拉伯字形。
String realFilename = StringEscapeUtils.unescapeXml(escapedFilename);
答案 1 :(得分:0)
该编码没有任何问题。这意味着与您给出的名称完全相同。
根据XML standard字符,引用可以采用#&n;
形式,其中n
是十进制([0-9]+
)或十六进制(x[0-9a-fA-F]+
)数字,指代所代表的字符的Unicode代码点。因此,您问题中的文件名是有效的XML。
在您的情况下,第一个字符ا
(相当于ا
)表示带有十进制代码点1575的Unicode符号,通常以十六进制表示为U + 0627。此代码点被描述为阿拉伯字母“alef”。
符号是从左到右编码的,即使它是编码的阿拉伯语(从右到左)符号,因此“alef”位于ASCII文件名的左侧。由渲染引擎(无论可能是什么)将字符串呈现为RTL。
我的Java经验非常有限,所以很遗憾我不能指出你可以帮助你处理这个问题的内置或Spring功能,但似乎你的XML没有被正确解码(如果我不得不猜)