Java 转换为问号的阿拉伯文文件名

Java 转换为问号的阿拉伯文文件名,java,encoding,centos,Java,Encoding,Centos,我有一个spring应用程序,它是用来上传excel文件的表单之一 该应用程序将文件保存在硬盘上,并提供一个链接供用户再次下载 如果文件名是用英语写的,一切正常,但如果文件名包含阿拉伯字符,则文件阿拉伯字符将转换为问号 很明显,这个问题与字符编码有关,但我无法准确地发现问题出在哪里 以下是系统结构和配置: 操作系统:Centos 应用服务器:Tomcat 在server.xml中配置连接器 [Connector port=“8009”protocol=“AJP/1.3”redirectPort

我有一个spring应用程序,它是用来上传excel文件的表单之一

该应用程序将文件保存在硬盘上,并提供一个链接供用户再次下载

如果文件名是用英语写的,一切正常,但如果文件名包含阿拉伯字符,则文件阿拉伯字符将转换为问号

很明显,这个问题与字符编码有关,但我无法准确地发现问题出在哪里

以下是系统结构和配置:

  • 操作系统:Centos
  • 应用服务器:Tomcat
  • 在server.xml中配置连接器

    [Connector port=“8009”protocol=“AJP/1.3”redirectPort=“8443”URIEncoding=“UTF-8”]

我认为它的阿拉伯语语言不支持您的系统语言,所以请尝试一下

字节[]utf8Bytes=(“阿拉伯字符串”).getBytes(“阿拉伯”); 参数=新对象[]{新字符串(utf8Bytes,“UTF8”)};
System.out.println(参数)

浏览这两页:

-乔尔·斯波尔斯基

也许这些会有帮助

  • 你必须知道什么是阿拉伯字符的字符集

  • 如果你不知道,你可以试试UTF-16

  • 要使用的代码如下所示:

    // output stream
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    
    // input stream
    InputStream in = new FileInputSteam("filePath");
    
    // reading buffer
    byte[] buffer = new byte[1024];
    
    // 1st read
    int bytes = in.read(buffer, 0, buffer.length());
    
    while(bytes != -1) {
       // write buffer
       bout.write(buffer);
    
       // re-load buffer
       bytes = in.read(buffer, bytes, buffer.length());
    }
    
    String yourText = bout.toString(Charset.forName("YOUR_CHARSET"));
    
    // close stream or use JSE7 try-catch-with-resource
    in.close();
    bout.close();
    

    尽情享受。

    您的文件系统编码是什么?您的虚拟机的默认编码是什么?尝试将文件名输出到某个JSP(使用UTF-8)以查看文件名是否得到了很好的接收。您还应该了解客户机文件系统编码。如果浏览器收到带有无效字符的文件名,它将更改名称。没有名为
    阿拉伯语的字符编码。