The way those characters are displayed depends entirely upon the terminal settings / locale / charset, etc.
I don't see what's hosed about it though. Many of those hex values in the query string do not correspond to "normal" ascii printable characters, so you should expect some odd output when printing it to the terminal, or viewing the file to which it was been written. But while those values are still in your variable - after yanking them with param - they should still be fine. This is just a display issue.
If you're writing these to a file, perhaps it might be better to
pack() the data, and
write() it to the file, and later
read() it when it's needed. Or even simply using
binmode would suffice. (This keeps
print from inserting any extra or different junk - normal text file laziness promotion ;)