ASCII table codes 1,2,3 & 4 pretty simple to use.
WS(S) has in the box solutions for a lot of these... on top of that, application gateways, distribution, failover etc. You get a lot of already solved solutions in the box, so to speak. If you use raw sockets, now you have to implement all of these things yourself, and you aren't gaining much over just using WSS.
You don't always _need_ those things. Right? Right.
(This is true regardless of UTF-8 -- in-band encodings are almost always brittle!)