Transformer encoding not working for ISO-8859-1 only for UTF-8

J

janib

I have a problem when transforming text containing the swedish letters
"å", "ä" and "ö". If I do

Transformer t =TransformerFactory.newInstance().newTransformer();
t.setOutputProperty( OutputKeys.METHOD, "xml");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
t.setOutputProperty( OutputKeys.INDENT, "yes");
t.setOutputProperty( OutputKeys.ENCODING, "ISO-8859-1"); <------- *
t.transform( new DOMSource( document), new StreamResult( output ) );
return output.toString( );

I get an xml-file containing broken characters (=?) for the swedish
letters:

<?xml version="1.0" encoding="ISO-8859-1"?>
....
<channelinfo confirmed="true" validate="false" name="Internet">
<publishdate>1154940455898</publishdate>
<unpublishdate>1154940455898</unpublishdate>
<attribute name="rooms"/>
<attribute name="year"/>
<attribute name="title">K?pes</attribute> <------------- *
<attribute name="price">20000</attribute>
<attribute name="area"/>
<attribute name="body">Vill k?pa en truck</attribute>
<-------------- *
</channelinfo>

but if I change the encoding to UTF-8:

t.setOutputProperty( OutputKeys.ENCODING, "UTF-8"); <------- *

the letters are alright:

<?xml version="1.0" encoding="UTF-8"?>
....
<channelinfo confirmed="true" validate="false" name="Internet">
<publishdate>1154940455898</publishdate>
<unpublishdate>1154940455898</unpublishdate>
<attribute name="rooms"/>
<attribute name="year"/>
<attribute name="title">Köpes</attribute> <------------- *
<attribute name="price">20000</attribute>
<attribute name="area"/>
<attribute name="body">Vill köpa en truck</attribute>
<-------------- *
</channelinfo>

But the xml has to be formated in ISO-8859-1 so it would be nice if I
could make it work with that encoding.

Anyone know where I can alter this behavior or why it behaves like
above?
 
J

Jono

Hi Janib,
Your code works fine for me (as expected, because å", "ä" and "ö"
are part of the ISO-8859-1 character set), so I think the problem might
lie with one of the objects you're creating out of the scope of the
code snippet. Your "output" object might have a side-effect if it's
doing some character encoding of its own. I tried with a StringWriter
and also with a FileOutputStream and it worked correctly (using Java
1.5).
Cheers,
Jono
 
J

janib

Tje output object is only a ByteArrayOuputStream...

ByteArrayOutputStream output = new ByteArrayOutputStream( );

Jono skrev:
 
R

Roland de Ruiter

Tje output object is only a ByteArrayOuputStream...

ByteArrayOutputStream output = new ByteArrayOutputStream( );
See my reply in comp.lang.java.help
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top