package tim.prune.save.xml;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.nio.charset.Charset;
+
/**
* Collection of utility functions for handling XML
*/
private static final String CDATA_START = "<![CDATA[";
/** End of Cdata sequence */
private static final String CDATA_END = "]]>";
+ /** Cached copy of system encoding string */
+ private static String _systemEncoding = null;
/**
* Fix the CDATA blocks in the given String to give valid xml
}
return CDATA_START + result + CDATA_END;
}
+
+
+ /**
+ * @return true if system uses UTF-8 by default
+ */
+ public static boolean isSystemUtf8()
+ {
+ String systemEncoding = getSystemEncoding();
+ return (systemEncoding != null && systemEncoding.toUpperCase().equals("UTF-8"));
+ }
+
+ /**
+ * @return name of the system's character encoding
+ */
+ public static String getSystemEncoding()
+ {
+ if (_systemEncoding == null) {
+ _systemEncoding = determineSystemEncoding();
+ }
+ return _systemEncoding;
+ }
+
+ /**
+ * Use a temporary file to obtain the name of the default system encoding
+ * @return name of default system encoding, or null if write failed
+ */
+ private static String determineSystemEncoding()
+ {
+ File tempFile = null;
+ String encoding = null;
+ try
+ {
+ tempFile = File.createTempFile("gpsprune", null);
+ OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(tempFile));
+ encoding = getEncoding(writer);
+ writer.close();
+ }
+ catch (IOException e) {} // value stays null
+ // Delete temp file
+ if (tempFile != null && tempFile.exists()) {
+ if (!tempFile.delete()) {
+ System.err.println("Cannot delete temp file: " + tempFile.getAbsolutePath());
+ }
+ }
+ // If writing failed (eg permissions) then just ask system for default
+ if (encoding == null) encoding = Charset.defaultCharset().name();
+ return encoding;
+ }
+
+
+ /**
+ * Get the default system encoding using a writer
+ * @param inWriter writer object
+ * @return string defining encoding
+ */
+ public static String getEncoding(OutputStreamWriter inWriter)
+ {
+ String encoding = inWriter.getEncoding();
+ try {
+ encoding = Charset.forName(encoding).name();
+ }
+ catch (Exception e) {} // ignore failure to find encoding
+ return encoding;
+ }
}