Java中的特殊字符
我有一个表单(struts 1)正在验证中,在验证过程中,我被要求删除MS Word的卷曲单引号和双引号。这似乎是一个很简单的要求,我为此感到非常恼火 我的测试文本是Java中的特殊字符,java,utf-8,Java,Utf 8,我有一个表单(struts 1)正在验证中,在验证过程中,我被要求删除MS Word的卷曲单引号和双引号。这似乎是一个很简单的要求,我为此感到非常恼火 我的测试文本是“ 首先,我发现,当我在调试器中运行代码并观察IntelliJ认为值是什么时,它会显示 我使用了一段代码,在字段中的文本的StringBuilder上进行迭代,并测试文本中的每个字符。它替换或删除一些字符,如下所示: switch (origCharAsInt) { case ((int)'\u00C2'): sbOrig
“
首先,我发现,当我在调试器中运行代码并观察IntelliJ认为值是什么时,它会显示
我使用了一段代码,在字段中的文本的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?
任何帮助/解释都将不胜感激。您需要正确转义HTML。这里的答案不是Unicode。这是您的卡纸。我不知道为什么(在上面的开关内)这样做不起作用(并欢迎解释):
但这确实:
description = description.replaceAll("\u0080", "");
注意:我在上面的一个附加说明中找到了代码块:查看数据库,我看到这是保存的文本(我能想到的所有munging都发布了):€“€”
显然我处理的是各种编码方案,但不是WTF。到目前为止,我还尝试了description.replaceAll(\\p{C},”)代码>和description.replaceAll(“![:print:”,”)代码>无效。问题是我的用户在Word中编辑文本并复制粘贴到我的表单中,当它到达我的验证(在Java中)时,它显示为Unicode内容。在流程中,你建议我在哪里转义HTML?是的,也在等待回复!您需要对进入HTML表单POST的内容进行编码。这是HTTP 101。
description = description.replaceAll("\u0080", "");