code: public static String decomposeToAscii(final String s) {
          /* pure java version, doesn't work all the time:
          String normalized = Normalizer.normalize(s, Normalizer.Form.NFD);
          return normalized.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
          */
  
          // this works on more cases
          final char[] input = new char[s.length()];
          s.getChars(0, s.length(), input, 0);
          final char[] output = new char[input.length * 4];
          final int numChars = ASCIIFoldingFilter.foldToASCII(input, 0, output, 0, input.length);
  
          // now remove anything not in the printable US-ASCII range, but keep newlines
          final StringBuilder sb = new StringBuilder(numChars);
          for (int i = 0; i < numChars; i++) {
              final char c = output[i];
              // printable US-ASCII is from 32 to 126
              if ((32 <= c && c <= 126) || '\n' == c) sb.append(c);
          }
  
          return sb.toString();
      }
docs: Takes a Unicode string and tries to decompose non-7bit-ascii (Unicode Basic Latin) characters into 7bit ascii.
  For example, the string 'âåäöốở' is turned into 'aaaooo'.
  Note that it doesn't always succeed for some of the much more complicated characters (e.g. 'µ').
  Occasionally some complicated characters end up as two characters when the ASCIIFoldingFilter is used...
  Perhaps we want to adopt this library:
  http://www.ippatsuman.com/projects/junidecode/