The function make_id() in nodes.py converts a string into an identifier. Therefor some non-ascii-chars were escaped or changed. In German the normal way to change umlauts and eszett is: ä -> ae; ö -> oe, ü -ue, ß -> ss. Docutils does ä -> a, ö -> o, ü -> u, ß -> sz, but this is wrong.
The dict _non_id_translate_digraphs should be changed (0x00df: u'ss', # ligature sz/ss) and updated (0x00e4: u'ae', 0x00f6: u'oe', 0x00fc: u'ue').
Stability of ids in URLs is considered a feature. Regenerating a target document with the suggested logic would break this stability. Thus this request is rejected.
See https://sourceforge.net/mailarchive/forum.php?thread_name=CABiJP%3DJzdcsGO6yDG79KkjZbXa3MyfV-eqr%3DvuQDVoWMK6v1-Q%40mail.gmail.com&forum_name=docutils-develop for more details.
The URLs for the mail archive have changed. The thread is now at
https://sourceforge.net/p/docutils/mailman/message/29939426
Reopening: especially for people using non-Latin scripts, the generated ids are far from optimal (cf. https://sourceforge.net/p/docutils/feature-requests/42/).
Especially for deep links into generated documents, it would be a vast improvement to create ids based on a Latin transliteration or to use IRIs (http://tools.ietf.org/html/rfc3987) instead of URIs in the href attribute.
To address the stability problem for re-generated documents, I suggest a "make-id" config setting for the HTML writer with the alternatives: "legacy" (as currently), "transliterate", "encode".
To be "language angostic" (not restricted to German umlauts),
transliteration can use the Unidecode module:
https://pypi.python.org/pypi/Unidecode
As transliteration is language dependent and Docutils documents have a language setting, Unidecode should be supplemented by language-specific translation rules, e.g. ü->u by default but ü->ue in "de" and "se".
Superseded by the more generic approach discussed in feature request #66.