[jdom-interest] Todo list [eg]

Rosen, Alex arosen at silverstream.com
Sat Apr 28 14:00:37 PDT 2001


>> XMLOutputter.printDeclaration() knows that it should write encoding="UTF-8"
>> rather than encoding="UTF8". I think we need to add a long list of
translations
>> from Java encoding names to standard encoding names, or we'll print the
wrong
>> thing when using other encodings.
>
> Do you have other examples where it's necessary?

See the code below. This will print encoding="ISO8859_1" in the XML, which is
wrong, and Xerces will give you an error (unless you turn on
"http://apache.org/xml/features/allow-java-encodings").

Actually this is less serious than I previously thought. I had thought that XML
standard encoding names were not accepted by Java, but they are. The string you
get back from OutputStreamWriter.getEncoding() is always the Java-style (i.e.
wrong) name, but you can pass in a proper name to the constructor. So we could
just make it a requirement that you pass in a valid XML-style name to
XMLOutputter. (Possibly with a special case for "UTF8", for historical reasons,
though I'm not really sure why this should be treated differently.)

> P.S.  Care to submit a patch to the TODO?

Not sure how that would be different than the e-mail message I sent...

--Alex


import java.io.*;
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;

public class EncodingTest
{
	public static void main(String[] args)
	{
		try
		{
			// Create the document.
			Element root = new Element("r\u00f6\u00f6t");
			Document doc = new Document(root);

			// Output it using the Java-style encoding name "ISO8859_1"
			// instead of the standard XML-style name "ISO-8859-1".
			XMLOutputter outputter = new XMLOutputter("\t", true, "ISO8859_1");
			OutputStream out = new FileOutputStream(args[0]);
			outputter.output(doc, out);
			out.close();

			// Read in the file. This will fail, because Xerces chokes on "ISO8859_1".
			SAXBuilder builder = new SAXBuilder();
			InputStream in = new FileInputStream(args[0]);
			builder.build(in);
			in.close();
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}



More information about the jdom-interest mailing list