2012-06-16 6 views
2

У меня небольшая проблема. Я строю небольшой сервер в java, основанный на реализациях websockets причала. Клиенты - это браузеры, и я отправляю информацию с помощью websockets javascript api.Причал, websockets и кодировка UTF8

Все работает отлично, пока я не отправлю эти специальные символы, такие как: ă Ţ î ê ê ü ü Итак, вот в чем проблема. Клиент 1 отправляет сообщение на сервер с одним из этих символов. Сервер печатает сообщение, а затем отправляет сообщение клиенту. 2.

Клиент 2 получает сообщение и печатает сообщение на странице браузера html и отлично работает. Символы отображаются правильно.

Проблема в том, когда я хочу напечатать строку на сервере. Вместо ă показывает мне ? знак. Это вызывает у меня проблемы, потому что я хочу вставить текст в базу данных (mysql- с включенной кодировкой ut8)

Итак, что-то вроде проблемы. Текст, который отправляется из браузера, не кодируется UT8? или реализация websocket причала не получает String в кодировке utf8?

Благодаря

+0

Не уверен, что это применимо, но я наткнулся на аналогичную статью здесь, в которой объясняется, как некоторые типы mimety интерпретируются как не-UTF8 по умолчанию в Jetty: http://stackoverflow.com/a/31854430/3196753 – tresf

ответ

1

Вот функция, я использую HTML-кодирования всех специальных символов в строке (но не HTML себя (как < или >)). Если применить его перед отправкой строки на сервер, каждый должен увидеть то же самое, и вы можете хранить его в таблице БД:

function toHtmlEncoded(string){ 
    return string.replace(/[\u0080-\uC350]/g, 
         function(a) {return '&#'+a.charCodeAt(0)+';';} 
      ); 
} 
1

впервые прочитал эту http://kunststube.net/encoding/

Затем проверьте везде были преобразованы байт в строки (или наоборот). Обычные места для совершения ошибки включают вызов getBytes() на String без указания кодировки. Другие ошибки включают не настройку кодировки в строке подключения к базе данных.

Смежные вопросы