URI的编码是用来为application/x-www-form-urlencoded MIME准备数据的，它用于通过HTTP的请求操作提交HTML表单数据。URI允许的字符分为保留字符和未保留字符，保留字符具有特殊含义，而未保留字符没有特殊含义。百分号编码将保留字符表示为特殊字符序列。在URI中，其他字符必须使用百分号编码。如果一个保留字符在特定上下文中具有特殊含义，并且URI中必须使用该字符用于其他目的，那么该字符必须进行百分号编码。请问，URI的编码规则有哪些变化？保留字符和未保留字符分别是什么？百分号编码的具体步骤是怎样的？