**響應內容編碼與聲明不一致**。
Java (Servlet/Controller/Handler):
response.setContentType("text/plain;charset=UTF-8"); // 或 application/json
response.setCharacterEncoding("UTF-8");
// 寫入內容
response.getWriter().write(filePath);
Spring MVC @ResponseBody:
@GetMapping(value = "/export", produces = "text/plain;charset=UTF-8")
@ResponseBody
public String export() { ... }
PHP:
header('Content-Type: text/plain; charset=UTF-8');
echo $filePath;
$.ajax({
url: '/export',
// 強制覆蓋 MIME 類型及編碼
beforeSend: function(xhr) {
xhr.overrideMimeType('text/plain;charset=UTF-8');
},
success: function(filePath) {
$(".download").attr("href", filePath);
}
});
或使用 `xhrFields: { responseType: 'text' }` 配合服務端正確 header。
後端返回 **URL 編碼後的文件名**,前端解碼:
// 後端 Java
String encodedName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
response.getWriter().write(encodedName);
// 前端 JS
success: function(encodedPath) {
var decodedPath = decodeURIComponent(encodedPath);
$(".download").attr("href", decodedPath);
}
優點:純 ASCII 傳輸,完全規避編碼問題;缺點:需雙端配合編解碼。