我从MS Word复制了以下文本并将其粘贴到HTML输入文本字段
Test…. !! Wow
它在浏览器上显示正确,长度也是13个字符。但是当我提交表单时,Java代码中收到的文本是
Testâ¦. !! Wow
计数为15.我在Javascript和Java代码中进行了最大文本字段长度检查。因为Java代码中文本的长度增加,所以文本可能在Javascript中验证但在Java代码中失败。我想在两种情况下使用相同的格式(或至少相同的长度,以便验证是一致的)
答案 0 :(得分:2)
我们在这里看到的“â”是由三个字节0xE2 0x80 0xA6产生的,它们构成了“...”U+2026 HORIZONTAL ELLIPSIS的UTF-8编码表示。当解释为Latin-1(ISO-8859-1或windows-1252)编码时,字节0xE2为“â”,类似地,0xA6为“|”。 0x80字节会发生什么不清楚,但可能已经过滤掉了,因为在ISO-8859-1中它是一个控制字符。
因此,表单数据显然是以UTF-8编码的形式发送的(这通常取决于包含表单的页面的编码,但也可以使用accept-charset
中的<form>
属性进行设置。 } 标签)。这一切都很好,因为UTF-8是确保所有字符正确发送的唯一方法。
所以问题出在接收方。 Java代码显然读取数据,假设它是8位编码(一个字节=一个字符),但事实并非如此。
(文本包含U + 2026的原因可能是Word中的自动更正:默认情况下,Word在键盘输入中将三个连续句点“...”转换为一个字符,省略号“...”。)
答案 1 :(得分:0)
这几乎肯定是编码问题。您粘贴的字符将为UTF-8(或类似字符),但将作为ANSI字符发送。您需要为提交设置编码。