一个百分号%引起的事故

前两天通过我们的游戏中心无法下载某款游戏,把下载地址直接扔到浏览器下载时OK的,

而且同样在应用商店也无法下载,但是可以下载其他的游戏,

那出问题的应该是系统的下载管理器模块了,因为游戏中心与应用商店都是通过下载管理器下载的。

我想是不是这款游戏有什么特殊导致无法下载呢?

后来系统管理器的同事定位是因为我们传的路径里面含有特殊的字符%,

这个%来自游戏的名字,这个游戏的名字运营是可编辑的,马上让运营人员修改这个%,要么去掉,要么换成全角。

这样,解决了。

但是,定位问题的时候,发现低版本的下载管理器是没有问题的,

是因为某个版本开始,下载管理器的在将应用提交的下载信息里的路径存放地址,放入数据库时,使用了

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的时候,遇到%,%后面的字符

就会按照特殊字符来解析。

时间: 2024-10-25 00:29:11

一个百分号%引起的事故的相关文章

C语言中如何用printf函数输出百分号?

打两个%%..比如printf( "%%\n" );就可以输出一个百分号.同理,输出两个百分号的话就需要写四个. #include <stdio.h> int main(int argc, const char * argv[]) { printf("%%%%");//printf函数打印 % 字符要用 %% 才能打印 return 0; }

Python基础-字符串格式化_百分号方式_format方式

Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing '%' string formatting operator. 1.百分号

关于正则表达式的一个小总结

1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束.例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等):"of despair$":表示所以以"of despair"结尾的字符串:"^abc$":表示开始和结尾都是"abc"的字符串--呵呵,只有"

关于Android资源文件中出现百分号的问题

编辑strings.xml的时候,提示 %编译不通过. <string name="url">http://aa.cc.com/dd?g=%rasdf</string> 或者 <string name="message_content'>这里是积分 %1s 积分,占比%2s %</string> 提示下面的错误 Multiple annotations found at this line: - error: Multiple

【转】关于Android资源文件中出现百分号的问题

关于Android资源文件中出现百分号的问题 分类: Android JAVA2014-08-01 16:53 1345人阅读 评论(0) 收藏 举报 ANDROID格式化资源文件 目录(?)[+] 问题编辑strings.xml的时候 在行 [html] view plaincopy <string name="myurl">http://code.dd.com/rr?q=%rr.55</string> 或者 [html] view plaincopy <

python学习笔记(二)

一.版本问题 python2与python3是目前主要的两个版本. python3.0版本较之前的有很大变动,而且不向下兼容. Python 2.7作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移.即2.7版本兼容2.x和3.0的语法 Python 2.7保持了对之前版本的全兼容,而且还包含了Python 3.0的新玩意(一些新特性需要通过"from __future__ import"来启用). 如果想要在python2.7中使用:p

Python中字符串格式化如何实现?

Python开发中字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. This PEP proposes a new system for built-in string formatting operations, intended as a replacement for the existing '%' string formatting operator. 1.百分号方式 %[(na

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

GCC的编译和安装 很好的资料

http://blog.csdn.net/yrj/article/details/492404 1.GCC的编译和安装2.预处理    #define 可以支持不定数量的参数.    例子如下:    #define err(...) fprintf(stderr,__VA_ARGS__)    err("%s,%d/r/n","The error code:",48);    扩展为:    fprintf(stderr,"%s,%d/r/n"