Did you read
<http://www.zope.org/Products/Zope/2.10.4/Zope-2.10.4-released>
Yes.
The migration code should auto-detect ISO-8859-15 and UTF-8 encoded page templates. For other encodings you must set the environment variable ZPT_PREFERRED_ENCODING. The migration code applies to ZopePageTemplate instances only. I have utf-8 encoded ZPTs so I didn't used ZPT_PREFERRED_ENCODING
When you download ZPT content through FTP or WebDAV the content is converted using the output_encoding property of the corresponding ZopePageTemplate instance. So far I didn't even try ftp or webdav with 2.10.4. The problems are with TTW.
The encoding of a rendered ZPT (through HTTP) is determined through charset=XXXX within the content-type HTTP response header etc/zope.conf: default-zpublisher-encoding default: iso-8859-15 default-zpublisher-encoding is set to utf-8
In order to deal with UnicodeDecodeErrors in a reasonable way, we added a configurable Unicode conflict resolver. As I said before resolver is not even called when using 'structure' keyword.
-- Maciej Wisniowski