Sunday 15 May 2011

java - XML encoding UTF-8 not working for turkish characters -



java - XML encoding UTF-8 not working for turkish characters -

i have method create , record xml file. produces corrupted result. turkish characters writing hexadecimal expressions. while i'm using utf-8, couldn't solve problem. way checked both sublime , notepad++ editors.

public boolean add(batfile batfile) throws exception { file inputfile = new file(filelocation); documentbuilderfactory docfactory = documentbuilderfactory .newinstance(); documentbuilder docbuilder = docfactory.newdocumentbuilder(); document doc = docbuilder.parse(inputfile); element rootelement = doc.getdocumentelement(); element batfileelement = doc.createelement("batfile"); rootelement.appendchild(batfileelement); element batjobname = doc.createelement("name"); batjobname.appendchild(doc.createtextnode(batfile.getname())); batfileelement.appendchild(batjobname); element batfilebriefdesc = doc.createelement("briefdesc"); batfilebriefdesc .appendchild(doc.createtextnode(batfile.getbriefdesc())); batfileelement.appendchild(batfilebriefdesc); element batfiledesc = doc.createelement("desc"); batfiledesc.appendchild(doc.createtextnode(batfile.getdesc())); batfileelement.appendchild(batfiledesc); element batfilename = doc.createelement("filename"); batfilename.appendchild(doc.createtextnode(batfile.getfilename())); batfileelement.appendchild(batfilename); element batcommandargs = doc.createelement("commandargs"); (int k = 0; k < batfile.getcommandargs().size(); k++) { element commandarg = doc.createelement("commandarg"); // commandarg.setattribute("id", string.valueof(k)); commandarg.appendchild(doc.createtextnode(batfile.getcommandargs() .get(k))); batcommandargs.appendchild(commandarg); } batfileelement.appendchild(batcommandargs); element batcreationtime = doc.createelement("creationtime"); batcreationtime.appendchild(doc.createtextnode(batfile .getcreationtime())); batfileelement.appendchild(batcreationtime); element batschedulerpattern = doc.createelement("schedulerpattern"); batschedulerpattern.appendchild(doc.createtextnode(batfile .getexecutionpattern())); batfileelement.appendchild(batschedulerpattern); element battaskid = doc.createelement("taskid"); if (batfile.gettaskid() != null) { battaskid.appendchild(doc.createtextnode(batfile.gettaskid())); } batfileelement.appendchild(battaskid); transformerfactory tfactory = transformerfactory.newinstance(); transformer transformer = tfactory.newtransformer(); domsource domsource = new domsource(doc); streamresult result = new streamresult(new filewriter(inputfile)); transformer.setoutputproperty(outputkeys.indent, "yes"); transformer.setoutputproperty(outputkeys.encoding, "utf-8"); transformer.transform(domsource, result); homecoming true; }

when test codes below:

@test public void testaddingtask() throws exception { ibao testbao = xmlbao.getinstance(); batfile testbatfile = new batfile(); testbatfile.setname("ŞŞŞŞŞ"); testbatfile.setbriefdesc("ÇÇÇÇÇÇ"); testbatfile.setdesc("ĞĞĞĞĞĞ"); testbatfile.setfilename("filename"); testbatfile.setcreationtime("merhaba"); testbatfile.setexecutionpattern("ööçöçöçüü"); testbatfile.addcommandargs("zzzzzzzz"); testbatfile.settaskid("ÜÜÜÜÜÜÜÜ"); testbao.add(testbatfile); }

it produces me result:

<batfiles> <batfile> <name>???/name> <briefdesc>???</briefdesc> <desc>???</desc> <filename>filename</filename> <commandargs> <commandarg>zzzzzzzz</commandarg> </commandargs> <creationtime>merhaba</creationtime> <schedulerpattern>??????</schedulerpattern> <taskid>????</taskid> </batfile> </batfiles>

you're writing character stream , not letting api command encoding info written as. filewriter uses default platform encoding might not utf-8:

the constructors of class assume default character encoding , default byte-buffer size acceptable.

use fileoutputstream streamresult (in try-with-resources block.)

you might having issues due java source file encodings. consider using unicode escapes instead of literals. is, "\u015e" instead of "Ş".

java xml encoding utf-8

No comments:

Post a Comment