After taking a longer break from my problem, I have now made a fresh, clean, scientifically conducted experiment in order to truly get to the bottom of this annoying problem once and for all.
First, I set cmd.exe to use Unicode, just to be sure:
C:\pg_dump_test>chcp 65001
Active code page: 65001
pg_dump: creating CONSTRAINT "Test schäma.Test täble Test täble_pkey"
= WORKS. The dump was successful. (In spite of weird output chars.)
C:\pg_dump_test>pg_dump --format plain --verbose --file "testdump.txt" --exclude-table-data="Test schäma.Test täble" --host="localhost" --port="5432" --username="postgres" --dbname="test"
pg_dump: last built-in OID is 16383
pg_dump: [archiver (db)] query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xe4 0x62 0x6c
pg_dump: [archiver (db)] query was: SELECT c.oid
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n
ON n.oid OPERATOR(pg_catalog.=) c.relnamespace
WHERE c.relkind OPERATOR(pg_catalog.=) ANY
(array['r', 'S', 'v', 'm', 'f', 'p'])
AND c.relname OPERATOR(pg_catalog.~) '^(test täble)$'
AND n.nspname OPERATOR(pg_catalog.~) '^(test schäma)$'
= FAILED. The dump was aborted with these nonsensical errors.
Finally, I tried the same command again like this:
I looked everywhere for some kind of "client-encoding" option in the pg_dump manual, but there is no such thing. The only thing I can think of is that the client's encoding (that is, pg_dump) is for some reason not set to "UTF8" even though that's the encoding of the "test" database which I'm connecting to.