Java中的特殊字符

时间:2012-09-25 20:19:27

标签: java utf-8

我有一个正在验证的表单(struts 1),在验证过程中,我被要求删除MS Word的单引号和双引号。看起来就像这么简单的要求,我正在把头发撕掉。

我的测试文字为’ “ ”

首先,我发现当我在调试器中运行代码并观察IntelliJ认为值是什么时,它会显示â\u0080\u0099 â\u0080\u009C â\u0080\u009D,而â\u0080似乎是非打印字符。

我使用了一段代码,迭代字段中文本的StringBuilder并测试文本中的每个字符。它取代或删除了一些字符,如下所示:

switch (origCharAsInt) {

    case ((int)'\u00C2'): sbOriginal.deleteCharAt(isb); break; // weird Word A with the caret over it
    case ((int)'\u00C3'): sbOriginal.deleteCharAt(isb); break; // weird Word A with the tilde over it
    case ((int)'\u00E2'): sbOriginal.deleteCharAt(isb); break; // weird Word a with the caret over it

    case ((int)'\u0099'): sbOriginal.setCharAt(isb, '\''); break; // Word single quote
    case ((int)'\u009C'): sbOriginal.setCharAt(isb, '"'); break; // Word left double quote
    case ((int)'\u009D'): sbOriginal.setCharAt(isb, '"'); break; // Word right double quote

    case ((int)'\u2018'):  sbOriginal.setCharAt(isb, '\''); break;  // left single quote
    case ((int)'\u2019'):  sbOriginal.setCharAt(isb, '\''); break;  // right single quote
    case ((int)'\u201A'):  sbOriginal.setCharAt(isb, '\''); break;  // lower quotation mark

    case ((int)'\u201C'):  sbOriginal.setCharAt(isb, '"'); break;  // left double quote
    case ((int)'\u201D'):  sbOriginal.setCharAt(isb, '"'); break;  // right double quote
    case ((int)'\u201E'):  sbOriginal.setCharAt(isb, '"'); break;  // double low quotation mark

    case ((int)'\u2039'):  sbOriginal.setCharAt(isb, '\''); break;  // Single Left-Pointing Quotation Mark
    case ((int)'\u203A'):  sbOriginal.setCharAt(isb, '\''); break;  // Single right-Pointing Quotation Mark

    default: break;

}

这似乎有效,因为它取代了一些更加恶劣的残骸,现在表格似乎包含' " "。但是,如果我再次保存,则IntelliJ认为该字段包含Â\u0080 Â\u0080\" Â\u0080\"

所以我添加了一些案例来删除那些字符。但是我对\u0080字符的持久性感到茫然。

我尝试添加一些案例以尝试删除它们,但它们无效。

case ((int)'\u0080'): sbOriginal.deleteCharAt(isb); break; // another weird Word non-printing char
case ((int)'\u0082'): sbOriginal.deleteCharAt(isb); break; // another weird Word non-printing char
case ((int)'\u0083'): sbOriginal.deleteCharAt(isb); break; // another weird Word non-printing char
case ((int)'\u0000'): sbOriginal.deleteCharAt(isb); break; // why are these weird symbols showing up?

非常感谢任何帮助/解释。

2 个答案:

答案 0 :(得分:0)

您需要正确转义HTML。 Unicode不是这里的答案。 This link是你的果酱。

答案 1 :(得分:0)

我不知道为什么这不起作用(在上面的开关内)(并欢迎解释):

case ((int)'\u0080'): sbOriginal.deleteCharAt(isb); break;

但这样做:

description = description.replaceAll("\u0080", "");