Don't.
? is used in wildcard expressions, like
ls maps/basement.???
Some other places support these expressions too. Don't break them by displaying this as ??.
Now, going through the whole ascii set:
! - used by QC code, REALLY should not have a special meaning for display. Example: "Assertion failed: !baa"
" - quotation mark. Don't even dare touching this.
# - used in "target" of items. Can appear in prvm_edicts dumps. So better don't make this show up wrong.
$ - variable expansio
% - used in say escapes (although they now also support \ in %'s place)
& - we had that. Can be in nick names and would make sense.
', (, ) - used in properly spelled English.
* - used in wildcard expressions, and at the start of some texture names in Quake
+ - used in mathematical expressions
,, -, ., /, :, ;, - regular punctuation
<, =, > - used in mathematical expressions
? - regular punctuation, and wildcards
@ - email addresses
[, ] - common in clan tags
\ - escape char for say escapes and \n
^ - color code character
_ - often used in variable names and entity classnames, don't touch
` - toggleconsole char on some keyboards
{, } - common in community tags
| - indeed, mostly unused, but |aaa for a color would look extremely weird. Some clans IIRC use it.
~ - toggleconsole char on some keyboards
By the way: these were all there are in ASCII. Don't block another char for color codes.
1. Open Notepad
2. Paste: ÿþMSMSMS
3. Save
4. Open the file in Notepad again
You can vary the number of "MS", so you can clearly see it's MS which is causing it.