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