前兩天經過咱們的遊戲中心沒法下載某款遊戲,把下載地址直接扔到瀏覽器下載時OK的,數據庫
並且一樣在應用商店也沒法下載,可是能夠下載其餘的遊戲,瀏覽器
那出問題的應該是系統的下載管理器模塊了,由於遊戲中心與應用商店都是經過下載管理器下載的。測試
我想是否是這款遊戲有什麼特殊致使沒法下載呢?spa
後來系統管理器的同事定位是由於咱們傳的路徑裏面含有特殊的字符%,code
這個%來自遊戲的名字,這個遊戲的名字運營是可編輯的,立刻讓運營人員修改這個%,要麼去掉,要麼換成全角。blog
這樣,解決了。遊戲
可是,定位問題的時候,發現低版本的下載管理器是沒有問題的,class
是由於某個版本開始,下載管理器的在將應用提交的下載信息裏的路徑存放地址,放入數據庫時,使用了亂碼
Uri.decode,致使插入數據庫失敗:下載
String displayName = "遊戲返60%"
String path = Uri.decode(displayName)
你們能夠試下,這時path裏面含有亂碼。
因此,爲了不下次再出錯,遊戲中心中的代碼,須要將這個path傳給下載管理器前,先Uri.encode下:
String displayName = "遊戲返60%"
String path = Uri.decode(Uri.encode(displayName))
我就再想是否是全部特殊的字符(經過Uri.encode轉變的字符,如:@#=+*&<>等)都會引起這樣的問題呢?
String displayName = "遊戲+"
String path = Uri.decode(displayName)
可是,通過測試發現上面的path是正常的,沒有亂碼。
通過Uri.encode的字符,若是有特殊的字符,特殊的字符都是以%開始的,因此Uri.decode的時候,遇到%,%後面的字符
就會按照特殊字符來解析。