在Spring中上传阿拉伯文件时,文件名以XML实体而不是阿拉伯字形结束

时间:2010-05-18 13:03:59

标签: java spring unicode internationalization

我使用Spring上传文件。上传阿拉伯文件并在控制器中获取原始文件名时,我得到的结果如下:

المغفلين.png

我希望它是:

  

المغفلين。PNG

为什么会出现此问题?

2 个答案:

答案 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。

在您的情况下,第一个字符ا(相当于&#x0627)表示带有十进制代码点1575的Unicode符号,通常以十六进制表示为U + 0627。此代码点被描述为阿拉伯字母“alef”。

符号是从左到右编码的,即使它是编码的阿拉伯语(从右到左)符号,因此“alef”位于ASCII文件名的左侧。由渲染引擎(无论可能是什么)将字符串呈现为RTL。

我的Java经验非常有限,所以很遗憾我不能指出你可以帮助你处理这个问题的内置或Spring功能,但似乎你的XML没有被正确解码(如果我不得不猜)