PhoneGap: Unicode-Datei mit BOM schreiben

1365945975_gnome-mime-text-xmlHier mal ein kleiner Post für zwischendurch.

Der PhoneGap-FileWriter schreibt in der Regel UTF-8-Dateien raus, verzichtet aber auf eine vorangestellten BOM (Byte-Order-Marker). Das hat zur Folge, dass z.B. CSV-Dateien mit Umlauten in Excel nicht korrekt angezeigt werden.

writer.write("\uFEFF");

Dieses Snippet (vor dem eigentlichen Schreiben) löst das Problem. Happy Coding!

One thought on “PhoneGap: Unicode-Datei mit BOM schreiben

  1. Hallo,
    vielen Dank für Ihren Post!
    Vielleicht könnten Sie mir an dieser Stelle bei einem Problem helfen?
    Bei *.csv Dateien funktioniert dieser Code mit dem vorangestellten BOM.
    Wie verhält es sich aber bei einer PDF Datei? Habe leider nichts passendes gefunden, was bei der Benutzung von PhoneGap-FileWriter relevant wäre. Im Anschluss eine Mini-Sample für eine kleine PDF File Ausgabe. Für einen Tip wäre ich sehr dankbar! :) Beste Grüße!

    FileWriter Example

    // Wait for Cordova to load
    //
    document.addEventListener(“deviceready”, onDeviceReady, false);

    // Cordova is ready
    //
    function onDeviceReady() {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
    }

    function gotFS(fileSystem) {
    // document.charset = “utf-8″;
    fileSystem.root.getFile(“test.pdf”, {create: true, exclusive: false}, gotFileEntry, fail);
    }

    function gotFileEntry(fileEntry) {
    document.charset = “utf-8″;
    fileEntry.createWriter(gotFileWriter, fail);
    }

    function gotFileWriter(writer) {
    document.charset = “utf-8″;
    writer.onwriteend = function(evt) {
    console.log(“contents of file now ‘some sample text'”);
    writer.truncate(11);
    writer.onwriteend = function(evt) {
    console.log(“contents of file now ‘some sample'”);
    writer.seek(4);
    var text = “”+
    “%PDF-1.1″+”\n”+”\n”+

    “1 0 obj”+”\n”+
    “<>”+”\n”+
    “endobj”+”\n”+”\n”+

    “2 0 obj”+”\n”+
    “<>”+”\n”+
    “endobj”+”\n”+”\n”+

    “3 0 obj”+”\n”+
    “<>”+”\n”+
    “endobj”+”\n”+”\n”+

    “4 0 obj”+”\n”+
    “<>”+”\n”+
    “endobj”+”\n”+”\n”+

    “5 0 obj”+”\n”+
    “<>”+”\n”+
    “stream”+”\n”+
    “BT”+”\n”+
    “/Time0 16 Tf”+”\n”+
    “0 Tr”+”\n”+
    “.2 .2 .7 rg”+”\n”+
    “1 0 0 1 70.88 778.88 Tm (Ein Text in mit Klammern öäü) Tj”+”\n”+
    “ET”+”\n”+
    “endstream”+”\n”+
    “endobj”+”\n”+”\n”+

    “6 0 obj”+”\n”+
    “<<"+"\n"+
    "/Type /Resources"+"\n"+
    "/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"+"\n"+
    "/Font <>”+”\n”+
    “>>”+”\n”+
    “endobj”+”\n”+”\n”+

    “7 0 obj”+”\n”+
    “<>”+”\n”+
    “endobj”+”\n”+”\n”+

    “xref”+”\n”+
    “0 8″+”\n”+
    “0000000000 65535 f”+”\n”+
    “0000000012 00000 n”+”\n”+
    “0000000069 00000 n”+”\n”+
    “0000000136 00000 n”+”\n”+
    “0000000272 00000 n”+”\n”+
    “0000000387 00000 n”+”\n”+
    “0000000586 00000 n”+”\n”+
    “0000000706 00000 n”+”\n”+
    “trailer”+”\n”+
    “<>”+”\n”+
    “startxref”+”\n”+
    “834”+”\n”+
    “%%EOF”;
    writer.write(“\uFEFF”);
    writer.write(text);
    writer.onwriteend = function(evt){
    console.log(“contents of file now ‘some different text'”);
    }
    };
    };
    }

    function fail(error) {
    console.log(error.code);
    }

    Example
    Write File

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>