Concept for encoding of Unicode characters.
typename Ch;
enum { supportUnicode = 1 };
template<typename OutputStream>
static void Encode(OutputStream& os, unsigned codepoint);
template <typename InputStream>
static bool Decode(InputStream& is, unsigned* codepoint);
template <typename InputStream, typename OutputStream>
static bool Validate(InputStream& is, OutputStream& os);
template <typename InputByteStream>
static CharType TakeBOM(InputByteStream& is);
template <typename InputByteStream>
static Ch Take(InputByteStream& is);
template <typename OutputByteStream>
static void PutBOM(OutputByteStream& os);
template <typename OutputByteStream>
static void Put(OutputByteStream& os, Ch c);
};