日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java11 http正式_Java11 HttpClient下载中文文件名称乱码

發布時間:2023/12/14 java 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java11 http正式_Java11 HttpClient下载中文文件名称乱码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不知道這個是不是BUG,記錄一下。

下載文件如果文件名稱含有中文時,設置文件名稱一般有以下兩種方式:

// 使用URL編碼解決

//responseHeaders.add("Content-Disposition", "attachment; filename=" + UrlUtils.encode("蝸牛.txt"));

// 設置ISO-8859-1編碼解決

responseHeaders.add("Content-Disposition", "attachment; filename=" + new String("蝸牛.txt".getBytes(), SystemConfig.CHARSET_ISO_8859_1));

URL編碼這個在瀏覽器和HttpClient都是沒有問題的。

但是使用ISO-8859-1編碼時瀏覽器可以,但是HttpClient卻提示亂碼。

最后發現不知道為什么HttpClient這里可能存在byte轉為char沒有去符號& 0xFF,所以這里就會出現這個問題。

解決辦法:

final char[] chars = fileName.toCharArray();

for (int i = 0; i < chars.length; i++) {

// 轉為ISO-8859-1單字節

chars[i] = (char) (chars[i] & 0x00FF);

}

fileName = new String(chars);

驗證代碼:

@Test

public void testChar() throws Exception {

// 錯誤代碼:│ワラ￧ノロ.txt

var name = "蝸牛.txt";

read(new String(new String(name.getBytes(), "ISO-8859-1").getBytes()));

}

private void read(String name) throws Exception {

this.log(name);

var bytes = name.getBytes("ISO-8859-1");

var chars = name.toCharArray();

var chare = new char[bytes.length];

for (int i = 0; i < chars.length; i++) {

//this.log(bytes[i] + "=" + ((char) (bytes[i])) + "=" + ((char) (0xFF & bytes[i])));

// 如果不做0xFF操作異常

//chare[i] = (char) (bytes[i] & 0xFF); // 正常

chare[i] = (char) (bytes[i]); // 異常

}

this.log(new String(chare));

this.log(bytes.length);

this.log(bytes);

this.log(chars.length);

this.log(chars);

this.log(chars[0] & 0xFF);

}

總結

以上是生活随笔為你收集整理的java11 http正式_Java11 HttpClient下载中文文件名称乱码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。