Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的特殊字符_Java_Utf 8 - Fatal编程技术网

Java中的特殊字符

Java中的特殊字符,java,utf-8,Java,Utf 8,我有一个表单(struts 1)正在验证中,在验证过程中,我被要求删除MS Word的卷曲单引号和双引号。这似乎是一个很简单的要求,我为此感到非常恼火 我的测试文本是“ 首先,我发现,当我在调试器中运行代码并观察IntelliJ认为值是什么时,它会显示 我使用了一段代码,在字段中的文本的StringBuilder上进行迭代,并测试文本中的每个字符。它替换或删除一些字符,如下所示: switch (origCharAsInt) { case ((int)'\u00C2'): sbOrig

我有一个表单(struts 1)正在验证中,在验证过程中,我被要求删除MS Word的卷曲单引号和双引号。这似乎是一个很简单的要求,我为此感到非常恼火

我的测试文本是

首先,我发现,当我在调试器中运行代码并观察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", "");