title: Why are "control" characters illegal in XML 1.0?
body: <p>There are a variety of characters that are not legally encodeable in XML 1.0, e.g. <code>U+0007</code> ('bell') and <code>U+001B</code> ('escape'). Most of the interesting ones are non-whitespace 'control' characters.  </p>
  
  <p>It's clear from (e.g.) <a href="https://stackoverflow.com/questions/209193/special-characters-in-xml">this question</a> and others that it's <a href="http://www.sklar.com/blog/archives/96-XML-vs.-Control-Characters.html" rel="noreferrer">the XML spec that's the issue</a> -- but can anyone illuminate me as to <em>why</em> the XML spec forbids these characters? </p>
  
  <p>It seems like it could have been required that they be encoded in escapes, e.g. as <code>&amp;#x0007;</code> and <code>&amp;#x001B;</code> respectively, but perhaps there's a practical reason that the characters were forbidden rather than required to be escaped?</p>
  
  <p>Answerers have suggested that there is some motivation towards avoiding transmission control characters, but Unicode includes many <em>other</em> control-like characters (consider <code>U+200C</code> "zero width non joiner"). I recognize there may be no good reason for this behavior, but I would still like to understand it better.</p>
  
  <p>It's particularly frustrating because when those character values appear in other <strike>encodings</strike> data formats, I end up "double-escaping" new XML documents that need to encode this.</p>