有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    这种编码没有错。它的意思和你给它起的名字完全一样

    根据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没有正确解码(如果我不得不猜测的话)

  2. # 2 楼答案

    很可能是Spring将Unicode字符(至少是非ISO-8859-1字符)转换为XML实体。这种行为必须可以在Spring设置中的某个地方进行配置(或者您实际上与Spring结合使用的基于web的MVC框架中的那些设置,但没有提到)。因为我不做Spring,所以无法详细介绍如何配置它

    但是如果您不能永远计算它,那么您可以考虑使用Apache Commons Lang^{}手动地将XML实体解脱成真正的阿拉伯字形。

    String realFilename = StringEscapeUtils.unescapeXml(escapedFilename);