2013-10-17 2 views
1

우리는 CKEditor라는 JavaScript WYSIWYG 텍스트 편집기를 사용하고 있습니다. 편집기에는 사용자가 텍스트 편집기에 입력 한 내용을 HTML로 표시하는 소스 뷰가 있습니다. 때로는 편집기가이 원본보기에 줄 바꿈하지 않는 공백 ( )을 삽입하는 경우가 있습니다.왜이 문자 인코딩 문제는 일부 시스템에서만 발생합니까?

모든 것이 dev 시스템에서 올바르게 작동하는 것처럼 보이므로 프로덕션 서버에 배포했습니다. 이 시점에서 우리는 이상한 Â 문자 (Â)가 텍스트에 삽입되는 것을보기 시작했습니다. 일부 독서 후 나는 이것이 CKEditor 버그 추적 페이지의 여러 티켓에서보고되었음을 알았습니다. ckeditor.js에 대한 script 태그의 charset 속성을 UTF-8으로 설정하여 문제를 해결할 수있었습니다. 왜 script 태그는 특정 시스템에서 charset 처음에 설정 한 속성 및 필요한 이유는 않았다

내 질문

은?

this SO question의 마지막 코멘트는 UTF-8의 비 분리 공간에 대한 바이트 순서가 latin1의 비 분리 공백 뒤에 Â 문자 실제로 것을 언급 (ISO-8859-1 권리?). 사용자가 소스보기로 전환 할 때마다 다른 Â 문자가 차례대로 삽입되므로 이는 단서가 될 수 있습니다. 마치 CKEditor 프레임 워크가 비 분리 공간을 주입하려고하는 것처럼 보이지만, Â&nbsp, ÂÂ&nbsp 등으로 바뀝니다. 모든 시스템의 content-type (Chrome 디버거에서 확인)은 text/html;charset=ISO-8859-1이며 그 이유는 확실하지 않습니다. 모든 Tomcat 구성의 Dfile.encoding 옵션은 utf-8으로 설정됩니다. meta 태그도 <meta charset="utf-8">입니다.

+0

'FILE.encoding'은'file.encoding'이어야합니다. 시스템 속성은 대소 문자를 구분합니다! –

+0

@AaronDigulla 죄송합니다. 서버에 소문자로 잘못 입력했습니다. 고침, 고마워! – theblang

답변

1

웹 브라우저에서 개발 도구를 실행하십시오. 양식이 렌더링/제출되면 앞뒤로 보낸 요청 및 응답 헤더를 중지하고 살펴보십시오. 모든 곳에서 UTF-8을 확인하십시오. 누락 된 경우 한쪽에서 "기본 인코딩"으로 간주합니다.

set the charset on the forms도 페이지에서 자동으로 상속하지 않으므로 확인하십시오.

EDITThis page은 Tomcat을 사용할 때 charset을 설정하는 방법과 서블릿에 필요한 코드를 자세히 설명합니다.

+0

그래서 페이지에 대한 GET 요청에서'content-type' 속성을 검사했고 그것은'text/html; charset = ISO-8859-1'입니다. 그 후에는 JavaScript CKEditor 라이브러리를 사용하여 모든 것이 클라이언트 측에 해당하므로 그 밖의 다른 문제는 볼 수 없습니다. 어쩌면 내가 틀렸어. – theblang

+0

서블릿 코드에'response.setCharacterEncoding ("UTF-8")'이 없을 수도 있습니다. 자세한 내용은 내 편집을 참조하십시오. –

+0

좋은 점은 Spring Controller에서 'ISO-8859-1'대신 'content-type'을 'UTF-8'로 변경했다는 것입니다. 그러나 나를위한 진정한 수수께끼는 우리의 Windows 개발 기계 나 Linux 테스트 서버에서는 인코딩 문제가 발생하지 않지만 Linux 프로덕션 서버에서는 발생하지 않는 이유입니다. 확실하게 설정 차이가있을 거라고 생각했지만,'Dfile.encoding' 만 내가 생각할 수있는 전부입니다. – theblang