Когда текст, скопированный из MS Word, отправляется в Java через форму HTML, появляются странные символы и увеличивается длина текста - PullRequest
0 голосов
/ 17 января 2012

Я скопировал следующий текст из MS Word и вставил его в текстовое поле ввода HTML

Test…. !! Wow

Он правильно отображался в браузере, его длина также составляла 13 символов. Но когда я отправляю форму, текст, полученный в коде Java,

Testâ¦. !! Wow

со счетчиком 15. У меня есть проверка максимальной длины текстового поля в Javascript и в коде Java. Поскольку длина текста в коде Java увеличивается, текст может проверяться в Javascript, но не может выполняться в коде Java. Я хочу, чтобы в обоих случаях использовался один и тот же формат (или хотя бы одинаковая длина, чтобы проверка соответствовала)

Ответы [ 2 ]

2 голосов
/ 17 января 2012

То, что мы видим здесь как «â», получается из трех байтов 0xE2 0x80 0xA6, которые представляют в кодировке UTF-8 «…» U + 2026 ГОРИЗОНТАЛЬНЫЙ ЭЛЛИПСИС .Байт 0xE2 - это «â», когда он интерпретируется как кодированный латиницей-1 (ISO-8859-1 или windows-1252), и аналогично 0xA6 - это «¦».Что происходит с байтом 0x80, неясно, но, возможно, оно было отфильтровано, потому что в ISO-8859-1 это управляющий символ.

Таким образом, очевидно, данные формы отправляются в кодировке UTF-8 (обычно это зависит от кодировки страницы, содержащей форму, хотя ее также можно задать с помощью атрибута accept-charset в теге <form>).Это все нормально, потому что UTF-8 - единственный способ убедиться, что все символы отправлены должным образом.

Таким образом, проблема в принимающей стороне.Код Java, по-видимому, считывает данные, предполагая, что они находятся в 8-битной кодировке (один байт = один символ), но это не так.

(причина, по которой текст содержит U + 2026, вероятно, является автокоррекциейв Word: по умолчанию Word при вводе с клавиатуры превращает три последовательных периода «...» в один символ, многоточие «…».)

0 голосов
/ 17 января 2012

Это почти наверняка проблема кодирования. Вставляемые символы будут UTF-8 (или аналогичными), но будут отправляться как символы ANSI. Вам необходимо установить кодировку для отправки.

...