我有一个弹簧应用程序,其中一种形式是用来上传excel文件。
应用程序将文件保存在硬盘上,并提供指向用户的链接以便再次下载。
如果文件名是用英文写的,那么每件事都可以,但如果文件名包含阿拉伯字符,则文件阿拉伯字符会被转换为问号。
很明显,这个问题与字符编码有关,但我无法确切地发现问题的确切位置。
这是系统结构和配置:
server.xml中的连接器配置
[连接器端口=“8009”协议=“AJP / 1.3”redirectPort =“8443”URIEncoding =“UTF-8”]
答案 0 :(得分:0)
浏览这两页:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) - 作者:Joel Spolsky
和
the Wikipedia page for the unicode block for Arabic
也许这些会有所帮助......
答案 1 :(得分:0)
你必须知道阿拉伯字符的字符集。
如果您不知道,可以尝试使用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();
享受自己。
答案 2 :(得分:-3)
我认为它的阿拉伯语lang不支持你的系统语言,所以试试这个。
byte [] utf8Bytes =(“Arabic String”)。getBytes(“arabic”); argument = new Object [] {new String(utf8Bytes,“UTF8”)}; 的System.out.println(参数);