最近用手機端測試數(shù)據(jù)的時候魔眨,發(fā)現(xiàn)用手機端下載文件的文件名是亂碼滴劲,我查看了SystemNoticeManager.java的源碼之后發(fā)現(xiàn)他們對文件名的定義的之前的寫法是:
String finalFileName=URLEncoder.encode(filename.replaceAll(" ", ""),"UTF-8");
后來查閱資料才知道ios只支持ISO-8859-1的utf-8標(biāo)準(zhǔn)編碼苏章,同樣在pc端有效寂嘉,因此我只要修改這個地方的編碼即可。
也就是將這一行代碼改為:
String finalFileName= new String(filename.replaceAll(" ", "").getBytes("UTF-8"), "ISO-8859-1");
在找到這個解決方案之前,我走了一些彎路垫释,但是這些彎路都是值得學(xué)習(xí)的地方。
總結(jié)一下我對于這個bug的解決方案撑瞧,幾乎花了一整天的時間:
2.然而在手機端卻是混亂顯示:
3.然而原來的程序員哥/姐姐的代碼木有問題:
String finalFileName=URLEncoder.encode(filename.replaceAll(" ", ""),"UTF-8");
4.于是就懷疑是瀏覽器或者平臺不同導(dǎo)致了這個問題。因此就查找如何從前端頁面中獲取用戶平臺信息的方法预伺。結(jié)果發(fā)現(xiàn)了Navigator订咸,還找到了一堆還ok的代碼。我的搜索內(nèi)容是:“如何獲取瀏覽器信息”酬诀。后來才知道是寫一個js脏嚷,通過訪問Navigator對象能夠獲得信息。其中瞒御,網(wǎng)上有一些方法是訪問Navigator的UserAgent屬性父叙,判斷是否為ie瀏覽器的時候發(fā)現(xiàn)方法不對。
5.由于我的ie瀏覽器是ie11肴裙,ie8可以用
經(jīng)過一番鉆研趾唱,總算讓我找到一個方法可以準(zhǔn)確的識別出IE,辦法就是使用JavaScript的Navigator.userAgent蜻懦,因為對于IE瀏覽器甜癞,其返回的信息中有一個Trident字符串,這是獨屬于IE的宛乃。 實現(xiàn)代碼如下:
//獲取UserAgent接口悠咱,即判斷目前用戶使用了哪種瀏覽器
function getUA(){
var scan = navigator.platform;
//document.write(scan);
if(scan.indexOf(/Trident/i) > -1)
return "ie"; //判斷是否是ie瀏覽器,包括最新的ie11瀏覽器
else if(scan.indexOf("Chrome") > -1 )
return "chrome";//Chrome Browser
else if(scan.indexOf("iPhone") > -1 || scan.indexOf("Mac") > -1 ||
scan.indexOf("iPad") > -1)
return "safari";//safari Browser
else if(scan.indexOf("vivo") > -1)
return "vivo";
else if(scan.indexOf("XiaoMi") > -1)
return "xiaomi";
else if(scan.indexOf("Edge") > -1)
return "edge";
else if(scan.indexOf("Opera") > -1)
return "opera";
else if(scan.indexOf("Firefox") > -1)
return "firefox";
else
return "other";
}
//獲取平臺接口(pc征炼,iphone析既,ipad,Android)
function getPlatform(){
// document.write(scan);
var scan = navigator.userAgent;
if(scan.indexOf("Mobile") > -1)
return "mobile";
else if(scan.indexOf("Andriod") > -1 || scan.indexOf("Linux") > -1)
return "andriod";
else if(scan.indexOf("iPhone") > -1 || scan.indexOf("Mac") > -1)
return "iphone";
else if(scan.indexOf("iPad") > -1)
return "ipad";
else
return "pc";
}
<%--BEGIN ADD 思創(chuàng)運營系統(tǒng)V2.0 BY HUANGLE 2016/08/18 添加 通知 字段--%>
<%-- <div class="cont">
<table class="tableList">
<tr><th style="width:2rem;" id="companyTitle">系統(tǒng)公告</th><tr>
<%for ( int n = 1; n <= 5; n++){ %>
<tr>
<th color="green" size="<%=n%>" >
今天的大新聞谆奥!
</th>
<td id = "companyName">time</td>
</tr>
<%}%>
</table>
</div> --%>
<%--END ADD 思創(chuàng)運營系統(tǒng)V2.0 BY HUANGLE 2016/08/18 添加 通知 字段--%>