Нам, вероятно, понадобится немного больше информации, чтобы правильно ответить на вопрос. Например, какую проблему вы видите? Какую версию Java вы используете?
Однако, расширив свой первый пример до
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
String strXMLAlert = "<a>永</a>";
InputStream is = new ByteArrayInputStream(strXMLAlert.getBytes("UTF-8"));
Document document = db.parse(is);
Node item = document.getDocumentElement().getChildNodes().item(0);
String nodeValue = item.getNodeValue();
System.out.println(nodeValue);
В этом примере в строке есть китайский символ. Успешно распечатывает
永
Ваш второй пример также должен работать, хотя вы предоставляете контент дважды. Либо предоставьте его в виде набора байтов и предоставьте кодировку, либо просто предоставьте его в виде символов (StringReader), и вам не нужно кодирование (поскольку в качестве символов оно уже декодировано из байтов в символы).