2012-11-12 3 views
0

XSLT 변환을 수행하고 있습니다. 변환 후에 크로아티아 특수 문자를 잃어 버렸기 때문에 인코딩에 문제가 있습니다. 나는 javax.xml.transform.Transformer를를 사용하고 있는데이 같은 인코딩 설정 해요 :XSLT 변환이 특수 문자를 사용하지 않습니다.

transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 

우리는, 웹 스피어 8 사용을 다음과 같은 JVM 인수 또한

-Dclient.encoding.override=UTF-8 
-Dfile.encoding=UTF-8 

을 정의 변환은 다음과 같이 정의됩니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msg="http://b25/ics/ed/CC305A" xmlns:ct="http://b25/ics/complexTypes"> 
<xsl:output encoding="UTF-8" indent="yes" method="xml" /> 
... 

이 문제를 어떻게 해결할 수 있습니까?

+0

"잃어 버렸다"는 것은 무엇을 의미합니까? 그것들은 모두 출력에서 ​​생략되거나, 수치 엔티티로 인코딩되거나, ..? 문제를 나타내는 작은 입출력 스 니펫을 게시 할 수 있습니까? –

+0

문자가 생략되지는 않았지만 잘못 변형되었습니다. 예 : 'Ivica čšć'는 'Ivica'로 변환됩니다. –

+0

입력 문서가 UTF-8인지 확인하십시오. 문서를로드하고 UTF-8 (또는 다른 인코딩)을 지정하여 소스를 만들고 있습니까? JVM에서 시스템 기본 인코딩을 사용하고 있는지 궁금합니다. – cmonkey

답변

1

데이터가 XSLT 엔진에 들어가기 전에 또는 로그 아웃 한 후에 손실 (또는 miscoding)이 발생합니다. (문자 인코딩 문제는 데이터 공급자가 하나의 인코딩에 있다고 생각하고 수신자가 다른 인코딩에 있다고 생각할 때 거의 항상 소프트웨어 제품 간의 경계에서 발생합니다. 따라서 문제를 해결하기위한 첫 번째 단계는 어떤 경우인지 파악하는 것입니다. 입력 내용을 정확하게 알아내는 것은 쉽습니다. <xsl:comment><xsl:value-of select="string-to-codepoints(.)"/></xsl:comment>과 같은 것을 사용하면 변환에 제공 한 유니 코드 코드 포인트를 알 수 있습니다. 결과물을 정확하게 찾으려면 16 진수 편집기에서 XSLT 엔진의 직렬화 된 출력을 살펴 봐야합니다.

관련 문제