The following code maps a bunch of unicode punctuation to their more normal ASCII counterparts. For example, the Unicode character LEFT DOUBLE QUOTATION MARK is mapped to the ASCII double quotation mark: “.
Hashtable<String, String> map = new Hashtable<String, String>();
map.put(new String(Character.toChars(0x00AB)), new String("\""));
map.put(new String(Character.toChars(0x00AD)), "-");
map.put(new String(Character.toChars(0x00B4)), "\'");
map.put(new String(Character.toChars(0x00BB)), "\"");
map.put(new String(Character.toChars(0x00F7)), "/");
map.put(new String(Character.toChars(0x01C0)), "|");
map.put(new String(Character.toChars(0x01C3)), "!");
map.put(new String(Character.toChars(0x02B9)), "\'");
map.put(new String(Character.toChars(0x02BA)), "\"");
map.put(new String(Character.toChars(0x02BC)), "\'");
map.put(new String(Character.toChars(0x02C4)), "^");
map.put(new String(Character.toChars(0x02C6)), "^");
map.put(new String(Character.toChars(0x02C8)), "\'");
map.put(new String(Character.toChars(0x02CB)), "`");
map.put(new String(Character.toChars(0x02CD)), "_");
map.put(new String(Character.toChars(0x02DC)), "~");
map.put(new String(Character.toChars(0x0300)), "`");
map.put(new String(Character.toChars(0x0301)), "\'");
map.put(new String(Character.toChars(0x0302)), "^");
map.put(new String(Character.toChars(0x0303)), "~");
map.put(new String(Character.toChars(0x030B)), "\"");
map.put(new String(Character.toChars(0x030E)), "\"");
map.put(new String(Character.toChars(0x0331)), "_");
map.put(new String(Character.toChars(0x0332)), "_");
map.put(new String(Character.toChars(0x0338)), "/");
map.put(new String(Character.toChars(0x0589)), ":");
map.put(new String(Character.toChars(0x05C0)), "|");
map.put(new String(Character.toChars(0x05C3)), ":");
map.put(new String(Character.toChars(0x066A)), "%");
map.put(new String(Character.toChars(0x066D)), "*");
map.put(new String(Character.toChars(0x200B)), " ");
map.put(new String(Character.toChars(0x2010)), "-");
map.put(new String(Character.toChars(0x2011)), "-");
map.put(new String(Character.toChars(0x2012)), "-");
map.put(new String(Character.toChars(0x2013)), "-");
map.put(new String(Character.toChars(0x2014)), "-");
map.put(new String(Character.toChars(0x2015)), "-");
map.put(new String(Character.toChars(0x2016)), "|");
map.put(new String(Character.toChars(0x2017)), "_");
map.put(new String(Character.toChars(0x2018)), "\'");
map.put(new String(Character.toChars(0x2019)), "\'");
map.put(new String(Character.toChars(0x201A)), ",");
map.put(new String(Character.toChars(0x201B)), "\'");
map.put(new String(Character.toChars(0x201C)), "\"");
map.put(new String(Character.toChars(0x201D)), "\"");
map.put(new String(Character.toChars(0x201E)), "\"");
map.put(new String(Character.toChars(0x201F)), "\"");
map.put(new String(Character.toChars(0x2032)), "\'");
map.put(new String(Character.toChars(0x2033)), "\"");
map.put(new String(Character.toChars(0x2034)), "\'");
map.put(new String(Character.toChars(0x2035)), "`");
map.put(new String(Character.toChars(0x2036)), "\"");
map.put(new String(Character.toChars(0x2037)), "\'");
map.put(new String(Character.toChars(0x2038)), "^");
map.put(new String(Character.toChars(0x2039)), "<");
map.put(new String(Character.toChars(0x203A)), ">");
map.put(new String(Character.toChars(0x203D)), "?");
map.put(new String(Character.toChars(0x2044)), "/");
map.put(new String(Character.toChars(0x204E)), "*");
map.put(new String(Character.toChars(0x2052)), "%");
map.put(new String(Character.toChars(0x2053)), "~");
map.put(new String(Character.toChars(0x2060)), " ");
map.put(new String(Character.toChars(0x20E5)), "\\");
map.put(new String(Character.toChars(0x2212)), "-");
map.put(new String(Character.toChars(0x2215)), "/");
map.put(new String(Character.toChars(0x2216)), "\\");
map.put(new String(Character.toChars(0x2217)), "*");
map.put(new String(Character.toChars(0x2223)), "|");
map.put(new String(Character.toChars(0x2236)), ":");
map.put(new String(Character.toChars(0x223C)), "~");
map.put(new String(Character.toChars(0x2264)), "<");
map.put(new String(Character.toChars(0x2265)), ">");
map.put(new String(Character.toChars(0x2266)), "<");
map.put(new String(Character.toChars(0x2267)), ">");
map.put(new String(Character.toChars(0x2303)), "^");
map.put(new String(Character.toChars(0x2329)), "<");
map.put(new String(Character.toChars(0x232A)), ">");
map.put(new String(Character.toChars(0x266F)), "#");
map.put(new String(Character.toChars(0x2731)), "*");
map.put(new String(Character.toChars(0x2758)), "|");
map.put(new String(Character.toChars(0x2762)), "!");
map.put(new String(Character.toChars(0x27E6)), "[");
map.put(new String(Character.toChars(0x27E8)), "<");
map.put(new String(Character.toChars(0x27E9)), ">");
map.put(new String(Character.toChars(0x2983)), "{");
map.put(new String(Character.toChars(0x2984)), "}");
map.put(new String(Character.toChars(0x3003)), "\"");
map.put(new String(Character.toChars(0x3008)), "<");
map.put(new String(Character.toChars(0x3009)), ">");
map.put(new String(Character.toChars(0x301B)), "]");
map.put(new String(Character.toChars(0x301C)), "~");
map.put(new String(Character.toChars(0x301D)), "\"");
map.put(new String(Character.toChars(0x301E)), "\"");
map.put(new String(Character.toChars(0xFEFF)), " ");