+
+ /**
+ * Checks the input string for the three illegal characters,
+ * but only looping through the string once instead of three times
+ * @param inValue string to check
+ * @return true if at least one of the illegal characters is found
+ */
+ public static boolean hasIllegalCharacter(String inValue)
+ {
+ if (inValue == null) return false;
+ final int numChars = inValue.length();
+ for (int i=0; i<numChars; i++)
+ {
+ final char c = inValue.charAt(i);
+ if (c == '<' || c == '>' || c == '&')
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @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;
+ }