Actually the StreamingXMLWriter converts everything in bytestrings, using UTF-8 as default encoding (see the _write method). In Unix there is no difference between binary mode and text mode (the text mode is actually binary). The 'b' is there for portability on Windows.
The tricky bit is the '+' that triggers the validation, see the docstring of node_to_nrml in the node library (we can change that behavior, it is a bit hackish).