This is called encoding and this is how data is transferred. However, the service receiving the data will decode this on its end. So you no need to worry about this.
You can't send the square brackets as-is without encoding as they are considered unsafe. Below is the text from URL RFC
Unsafe:
Characters can be unsafe for a
number of reasons. The space
character is unsafe because
significant spaces may disappear and
insignificant spaces may be introduced
when URLs are transcribed or
typeset or subjected to the treatment
of word-processing programs. The
characters "<" and ">" are unsafe
because they are used as the
delimiters around URLs in free text;
the quote mark (""") is used to
delimit URLs in some systems. The
character "#" is unsafe and should
always be encoded because it is used
in World Wide Web and in other
systems to delimit a URL from a
fragment/anchor identifier that might
follow it. The character "%" is
unsafe because it is used for
encodings of other characters. Other
characters are unsafe because
gateways and other transport agents
are known to sometimes modify such
characters. These characters are "{",
"}", "|", "\", "^", "~", "[", "]",
and "`".
All unsafe characters must always
be encoded within a URL. For
example, the character "#" must be
encoded within URLs even in systems
that do not normally deal with
fragment or anchor identifiers, so
that if the URL is copied into another
system that does use them, it will
not be necessary to change the URL
encoding.