Ticket #7614: 7614.patch

File 7614.patch, 1.7 KB (added by simon04, 14 years ago)
  • src/org/openstreetmap/josm/io/XmlWriter.java

    diff --git a/src/org/openstreetmap/josm/io/XmlWriter.java b/src/org/openstreetmap/josm/io/XmlWriter.java
    index 0f06197..ae72868 100644
    a b  
    11// License: GPL. Copyright 2007 by Immanuel Scholz and others
    22package org.openstreetmap.josm.io;
    33
     4import static org.openstreetmap.josm.tools.I18n.tr;
     5import com.sun.org.apache.xml.internal.utils.XMLChar;
    46import java.io.PrintWriter;
    57import java.util.HashMap;
    68
    public class XmlWriter {  
    3840    public static String encode(String unencoded, boolean keepApos) {
    3941        StringBuilder buffer = null;
    4042        for (int i = 0; i < unencoded.length(); ++i) {
     43            final char c = unencoded.charAt(i);
    4144            String encS = null;
    42             if (!keepApos || unencoded.charAt(i) != '\'') {
    43                 encS = XmlWriter.encoding.get(unencoded.charAt(i));
     45            if (XMLChar.isInvalid(c)) {
     46                System.err.println(tr("Skipping invalid XML character U+{0}", Integer.toString(c, 16)));
     47                encS = "";
     48            } else if (!keepApos || c != '\'') {
     49                encS = XmlWriter.encoding.get(c);
    4450            }
    4551            if (encS != null) {
    4652                if (buffer == null) {
    47                     buffer = new StringBuilder(unencoded.substring(0,i));
     53                    buffer = new StringBuilder(unencoded.substring(0, i));
    4854                }
    4955                buffer.append(encS);
    5056            } else if (buffer != null) {
    51                 buffer.append(unencoded.charAt(i));
     57                buffer.append(c);
    5258            }
    5359        }
    5460        return (buffer == null) ? unencoded : buffer.toString();