То, что мы видим здесь как «â», получается из трех байтов 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 при вводе с клавиатуры превращает три последовательных периода «...» в один символ, многоточие «…».)