On a quick look, I didn't like the way you separated the "pg_database_encoding_max_length() > 1" cases. There seem to be too much common code. Can that be refactored a bit better?
I did a little refactoring in order to avoid some similar code. I'm not quite sure about my CHAR_CMP macro. Is it a good idea?