title: Why special character "$-_.+!*'()," in URL encoding are special?
body: <p><a href="https://www.rfc-editor.org/rfc/rfc1738#section-2.2!" rel="nofollow noreferrer">RFC1738 SEC 2.2</a> says that:</p>
  <blockquote>
  <p>Thus, only alphanumerics, the special characters &quot;$-_.+!*'(),&quot;, and
  reserved characters used for their reserved purposes may be used
  unencoded within a URL.</p>
  </blockquote>
  <p>After some searching, I summarized that there are three types of characters that should be encoded:</p>
  <ul>
  <li>Unsafe characters:  '#', ' ', '&quot;', '%', '&lt;', '&gt;', '{', '}', &quot;|&quot;, '', '^', '~', '[', ']', '`'.</li>
  <li>Reserved characters: ';', '/', '?', ':', '@', '=', '&amp;'.</li>
  <li>Special characters: &quot;$-_.+!*'(),&quot;</li>
  </ul>
  <p>I know why and when unsafe characters and reserved characters should be encoded. RFC1738 states that special characters can be used uncoded, but I found that <code>urllib2.quote</code> also encode these special characters to <code>&quot;%24-_.%2B%21%2A%27%28%29%2C%7E&quot;</code>. So, I am a little confused about
  why special characters are encoded if they can be used unencoded within a URL and why they are special.</p>