Just a wild shot in the dark here: I am guessing that those codes (BF, CB, etc) are simply high acsii characters that your display device (web browser, text editor, etc) doesn't know how to display.
The only solution I can think of is to build your own conversion table and use str_replace (instead of urldecode) to change the characters. For example, you might say, "CB" is "Copyright Symbol" and "BF" is "Star". That way, you might not actually see the copyright symbol or the star but you will at least know what was there.
I realize that this is a weak solution. It's the best I've got.
If you wanted to go further with that weak solution, you could replace all instances of "%CB" with "<img src='star.gif'>" or something like that. This way, you would at least be able to see something.
Hopefully someone has a better solution than mine.
(I don't think Yahoo is using any proprietary coding scheme, by the way. Is this in the referer variable or are they delivering you the string in some text document?)