I think you're overdoing it. Python comes with batteries included; just use them.
A correctly configured terminal session has the LANG
environment variable set; it describes which encoding the terminal expects as output from programs running in this session.
Python interpreter detects this setting and sets sys.stdout.encoding
according to it. It then uses that encoding to encode any Unicode output into a correct byte sequence. (If you're sending a byte sequence, you're on your own, and likely know what you're doing; maybe you're sending a binary stream, not text at all.)
So, if you output your text as Unicode, it must appear correctly automatically, provided that all the characters can be encoded.
If you need a finer control, pick the output encoding, encode with your own error handling, and output the bytes.
You're not in a business of changing the terminal session's settings, unless you're writing a tool specifically to do that. The user has configured the session; your program has to adapt to this configuration, not alter it, if it's a well-behaved program.