Похоже, вы хотите создать XML самостоятельно. Я думаю, что вам нужно быть намного понятнее и читать спецификацию XML, если вы хотите добиться успеха. Это единственные специальные символы XML, вы говорите: «Я знаю, что есть больше специальных символов, таких как иностранные языки и знаки валюты» ... они не определены в XML, если вы не подразумеваете кодирование как кодовые точки (например, £). Вы думаете HTML или какой-то другой DTD?
Единственный способ избежать двойного кодирования - это кодировать вещи только один раз. Если вы получили строку "& gt;", как вы узнаете, если она уже закодирована, и я хочу представить строку ">", или я хочу представить строку "& gt;".
Лучший способ - представить ваш XML в виде DOM (со строками в виде некодированных строк) и использовать XML-сериализатор, например, Xerces
Да, и помните, что в XML нет возможности представлять символы размером менее 0x20 (кроме & x9 ;, & xA; и & xD; - пробела).