Avatar billede sollie Nybegynder
25. marts 2007 - 16:13 Der er 8 kommentarer og
1 løsning

lave et xml dokument med UTF-16

Jeg har lavet et program i java som gemmer data i et xml dokument.
Jeg har dog det problem at jeg kun kan lave et standard xml dokument, altså der bliver ikke skrevet i filen hvilket utf format der skal bruges og derved bruges utf-8. Jeg skal bruge utf-16 i stedet for da jeg skal kunne gemme bogstaverne æ, ø og å i doukmentet.
Nogen der ved hvor jeg kan læse noget omkring dette?
Avatar billede arne_v Ekspert
25. marts 2007 - 16:13 #1
UTF-8 kan sagtens gemme ÆØÅ
Avatar billede sollie Nybegynder
25. marts 2007 - 17:43 #2
nej desvære ikke, jeg har prøvet det og hele lortet fucker up.
UTF-8 er en standard som kun kan håndtere det engelske alfabet.
Avatar billede arne_v Ekspert
25. marts 2007 - 18:29 #3
US-ASCII kan kun gemme det engelske alfabet

UTF-8 kan gemme alle unicode tegn

man skal være opmærksom på at ÆØÅ o.lign. bliver gemt som 2 bytes og et program
som fejlagtigt fortolker det som ISO-8859-1 vil derfor se sjov ud
Avatar billede arne_v Ekspert
25. marts 2007 - 18:30 #4
men hvis du gerne vil gemme i UTF-16, så kan det også lade sig gøre

hvordan gemmer du dit XML dokument ?
Avatar billede sollie Nybegynder
30. marts 2007 - 12:56 #5
import java.io.IOException;

import javax.xml.parsers.*;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;

public class MyXMLWriter {
       
    public void save(){
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       
        try {
              DocumentBuilder builder = factory.newDocumentBuilder();
              Document document = builder.newDocument();
              document.setXmlStandalone(true);
              Element root = (Element) document.createElement("movies");

              document.appendChild(root);
             
              XMLSerializer serializer = new XMLSerializer();
             
              try {
                 
                serializer.setOutputCharStream(new java.io.FileWriter("C://myxml.xml"));
            } catch (IOException e) {
                e.printStackTrace();
            }
               
            } catch (ParserConfigurationException pce) {
                pce.printStackTrace();
            }
           
    }
}
Avatar billede sollie Nybegynder
30. marts 2007 - 12:56 #6
forkert kode sorry.

Jeg gør det sådanne her:

package fileHandling.XMLHandling;

import java.io.*;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import types.comFilm;
import types.dvdFilm;
import types.dvdHddFilm;
import types.elecktronikMovieTypesSuperClass;
import types.mainMovieTypeSuperClass;
import types.physikalMovieTypesSuperClass;

public class writeXML {
    private boolean mySeri = false;
   
    public void saveFile(String des, String name, ArrayList comFilmList, ArrayList dvdFilmList, ArrayList dvdHddFilmList, ArrayList vhsFilmList){
       
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
          DocumentBuilder builder = factory.newDocumentBuilder();
          Document document = builder.newDocument();
          document.setXmlStandalone(true);

          Element root = (Element) document.createElement("movies");
         
          for(int i=0; i<comFilmList.size(); i++){
              Element comMovie = (Element) document.createElement("comMovie");
             
              comMovie.setAttribute("name", ((mainMovieTypeSuperClass) comFilmList.get(i)).getName());
              comMovie.setAttribute("description", ((mainMovieTypeSuperClass) comFilmList.get(i)).getDescription());
              comMovie.setAttribute("length", "" + ((mainMovieTypeSuperClass) comFilmList.get(i)).getLength());
              comMovie.setAttribute("internalType", "" + ((mainMovieTypeSuperClass) comFilmList.get(i)).getInternalType());
              comMovie.setAttribute("Bytes", "" + ((comFilm) comFilmList.get(i)).getBytes());
              comMovie.setAttribute("genere", "" + ((comFilm) comFilmList.get(i)).getGenere());
              comMovie.setAttribute("codec", ((comFilm) comFilmList.get(i)).getCodec());
              comMovie.setAttribute("good-quality", "" + ((comFilm) comFilmList.get(i)).getGoodQuality());
              comMovie.setAttribute("bought", "" + ((comFilm) comFilmList.get(i)).getBought());
             
              root.appendChild(comMovie);
          }
         
          for(int i=0; i<dvdFilmList.size(); i++){
              Element dvdMovie = (Element) document.createElement("dvdMovie");
             
              dvdMovie.setAttribute("name", ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getName());
              dvdMovie.setAttribute("description", ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getDescription());
              dvdMovie.setAttribute("length", "" + ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getLength());
              dvdMovie.setAttribute("internalType", "" + ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getInternalType());
              dvdMovie.setAttribute("genere", "" + ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getGenere());
              dvdMovie.setAttribute("lender", ((physikalMovieTypesSuperClass) dvdFilmList.get(i)).getLender());
              dvdMovie.setAttribute("discs", "" + ((dvdFilm) dvdFilmList.get(i)).getDiscNumber());
              dvdMovie.setAttribute("version", ((dvdFilm) dvdFilmList.get(i)).getVersionName());
              dvdMovie.setAttribute("good-quality", "" + ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getGoodQuality());
              dvdMovie.setAttribute("bought", "" + ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getBought());
             
              root.appendChild(dvdMovie);
          }
         
          for(int i=0; i<dvdHddFilmList.size(); i++){
              Element dvdHddMovie = (Element) document.createElement("dvdHddMovie");
             
              dvdHddMovie.setAttribute("name", ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getName());
              dvdHddMovie.setAttribute("description", ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getDescription());
              dvdHddMovie.setAttribute("length", "" + ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getLength());
              dvdHddMovie.setAttribute("internalType", "" + ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getInternalType());
              dvdHddMovie.setAttribute("genere", "" + ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getGenere());
              dvdHddMovie.setAttribute("good-quality", "" + ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getGoodQuality());
              dvdHddMovie.setAttribute("bought", "" + ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getBought());
              dvdHddMovie.setAttribute("Bytes", "" + ((elecktronikMovieTypesSuperClass) dvdHddFilmList.get(i)).getBytes());
              dvdHddMovie.setAttribute("discs", "" + ((dvdHddFilm) dvdHddFilmList.get(i)).getDiscNumber());
              dvdHddMovie.setAttribute("version", ((dvdHddFilm) dvdHddFilmList.get(i)).getVersionName());
             
             
              root.appendChild(dvdHddMovie);
          }
         
          for(int i=0; i<vhsFilmList.size(); i++){
              Element vhsMovie = (Element) document.createElement("vhsMovie");
             
              vhsMovie.setAttribute("name", ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getName());
              vhsMovie.setAttribute("description", ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getDescription());
              vhsMovie.setAttribute("length", "" + ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getLength());
              vhsMovie.setAttribute("internalType", "" + ((mainMovieTypeSuperClass) dvdFilmList.get(i)).getInternalType());
              vhsMovie.setAttribute("genere", "" + ((mainMovieTypeSuperClass) vhsFilmList.get(i)).getGenere());
              vhsMovie.setAttribute("good-quality", "" + ((mainMovieTypeSuperClass) vhsFilmList.get(i)).getGoodQuality());
              vhsMovie.setAttribute("bought", "" + ((mainMovieTypeSuperClass) dvdHddFilmList.get(i)).getBought());
              vhsMovie.setAttribute("lender", ((physikalMovieTypesSuperClass) dvdFilmList.get(i)).getLender());
          }
         
          document.appendChild(root);
         
          XMLSerializer serializer = new XMLSerializer();
          try {
              if(name.endsWith(".xml") || name.endsWith(".Xml") || name.endsWith(".XMl") || name.endsWith(".XML") || name.endsWith(".xML") || name.endsWith(".xMl") || name.endsWith(".xmL")){
              }else if(name.endsWith(".x") || name.endsWith(".X")){
                  name += "ml";
              }else if(name.endsWith(".Xm") || name.endsWith(".XM") || name.endsWith(".xM")){
                  name += "l";
              }else if(name.endsWith(".")){
                  name += "xml";
              }else{
                  name += ".xml";
              }
            serializer.setOutputCharStream(new java.io.FileWriter(des + name));
            mySeri = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
          if(mySeri){
              try {
                serializer.serialize(document);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          }
         
        } catch (ParserConfigurationException pce) {
            // Parser with specified options can't be built
            pce.printStackTrace();
        }
       
    }
}
Avatar billede arne_v Ekspert
01. april 2007 - 04:43 #7
prøv og erstat

serializer.setOutputCharStream(new java.io.FileWriter(des + name));

med

serializer.setOutputCharStream(new java.io.OutputStreamWriter(new java.io.FileOutputStream(des + name), "UTF-8"));
Avatar billede sollie Nybegynder
03. april 2007 - 08:07 #8
Det virkede ikke. :-)
Avatar billede sollie Nybegynder
10. april 2007 - 08:37 #9
Lukker spørgsmålet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester