2012-06-16 3 views
2

약간의 문제가 있습니다. Jetty Websocket 구현을 기반으로 Java에서 작은 서버를 구축하고 있습니다. 클라이언트는 브라우저이고 websockets javascript api를 사용하여 정보를 보냅니다.부두, 웹 소켓 및 UTF8 인코딩

모든 것은 내가 같은 그 특수 문자를 보낼 때까지 잘 작동 : T 자 I S ê ñ ü 그래서 여기에 문제가 있습니다. 클라이언트 1은이 문자 중 하나를 사용하여 서버에 메시지를 전송합니다. 서버는 메시지를 인쇄 한 다음 클라이언트 2에게 메시지를 전송합니다.

클라이언트 2는 메시지를 수신하고 브라우저 html 페이지에서 메시지를 인쇄하고 잘 작동합니다. 문자가 올바르게 표시됩니다.

문제는 내가 서버 사이트에서 문자열을 인쇄하고 싶을 때입니다. 대신을 보여 줍니까? char. 이 문제는 데이터베이스에 텍스트를 삽입하고자 할 때 발생합니다 (mysql- ut8 인코딩 사용)

그래서 .. 문제가있는 것 같습니다. 브라우저에서 보내는 텍스트가 UT8로 인코딩되지 않았습니까? 또는 부두 websocket 구현 utf8 인코딩 문자열을받지 못하는 ??

감사

+0

적용 여부는 확실하지 않지만 일부 MIME 유형이 Jetty에서 기본적으로 비 UTF8로 해석되는 방법을 설명하는 유사한 기사를 발견했습니다. http://stackoverflow.com/a/31854430/3196753 – tresf

답변

1

가 여기에 내가 문자열에 HTML 인코딩 모든 특수 문자를 사용하는 기능입니다 (그러나 < 또는 >) 같은 (자신을 html로하지 않음). 그런 다음 변환 된 바이트를했습니다 어디서나 확인이 http://kunststube.net/encoding/

을 읽을

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

첫째 : 서버에 문자열을 보내기 전에을 적용하면, 모두가 같은 볼 수 있으며 데이터베이스 테이블에 저장할 수 있습니다 문자열 (또는 그 반대). 실수를 범하는 일반적인 장소는 인코딩을 지정하지 않고 StringgetBytes()을 호출하는 것입니다. 데이터베이스 연결 문자열에 인코딩을 설정하지 않는 등의 단점이 있습니다.