我有一个表单(使用struts 1),需要进行验证。在验证期间,我被要求删除MS Word的弯曲单引号和双引号标记。这似乎是一个很简单的请求,但我却苦恼不已。
我的测试文本是
首先,我发现当我在调试器中运行我的代码并查看IntelliJ认为的值时,它显示
我使用了一段代码来迭代文本字段中的StringBuilder,并测试文本中的每个字符。它将某些字符替换或删除,如下所示:
任何帮助/解释都将不胜感激。
我的测试文本是
’ “ ”
。首先,我发现当我在调试器中运行我的代码并查看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?
任何帮助/解释都将不胜感激。
€' €" €"
显然我正在处理各种编码方案,但是这是什么鬼。 - barclaydescription.replaceAll("\\p{C}", "");
和description.replaceAll("![:print:]", "");
,但都没有成功。 - barclay