2010-07-20 6 views
0

특수 문자와 관련된 일반적인 문제로 인해 문제가 있습니다.특수 문자 문제

우리는 Linux에서 설치된 production tomcat 서버에서 실행중인 mbean을 가지고 있습니다.이 mbean은 xml 피드를 가져 와서 추가 처리를 위해 보냅니다. mbean이 '??'로 대체되는 특수 문자를 처리해야 할 때 문제가 발생합니다. 점수. OS 버전과 tomcat 버전이 모두 동일하지만 동일한 코드가 인 로컬 개발 및 QA 서버에서 사용할 수 있습니다.

StringBuffer article = new StringBuffer(); 

InputStreamReader is = new InputStreamReader(new FileInputStream(pendingFile), "utf-8"); 
int data; 
while ((data = is.read()) != -1) { 
    article.append((char)data); 
} 
is.close(); 
is = null; 

log.debug("Read in \n" + article.toString()); 
try { 
    js.writeTextMessage(article.toString(), "server", hostName, processor); 
} catch (JMSException je) { 
    log.error("jms exception: " + je.getMessage()); 
    // server probably shutdown 
    this.stop(); 
    return; 
} 

위의 코드는 "대기중인 파일 '에서 파일을 읽 StringBuffer를에 추가합니다, 로그에 파일을 읽고 :는 JMS Q로 보낼 XML 피드를 읽고 코드의 일부는 아래에 붙여 JMS 대기열에 대한 게시물. 로그 파일은 특별한 charas를 ?? '만 생산성에'특수 문자 XML 피드는 다음과 같습니다 : 톰캣 server.xml의 UTF-8

  1. URI 인코딩 : 우리는 포함 모든 possibilites을 시도

    <?xml version="1.0" encoding="UTF-8"?> 
    <hedline> 
        <hl1> 
         Hotelliyöpymiset: Missä hinta ja palvelu vastaavat toisiaan (tai eivät) - asiakastyytyväisyyden huippukaupungit 
        </hl1> 
    </hedline>* 
    

    .

  2. LANG 환경 변수가 Linux에서 en_US.UTF-8 인 것으로 확인되었습니다.
  3. xml 파일에 BOM이없는 UTF8 형식의 기본 인코딩이 있는지 확인했습니다.

원인이 Tomcat 서버 또는 Linux OS에서 발생하는지 여부를 확인할 수 없습니다. 도와주세요.

답변

1

기사 문자열을 텍스트로 기록하지 마십시오. 각 문자를 16 진수 정수로 덤프합니다. 그렇게하면 로깅이 실패했는지 또는 의 읽음이 실패했는지 여부를 알 수 있습니다.

JMS 대기열의 동작이 무엇인지 명확하지 않습니다. 실패한 로깅입니까, 아니면 JMS입니까?

당신이 FileAppender로 예를 들어 Log4j를 통해 로그인하는
0

, 당신은 로그 파일의 인코딩을 설정할 수 있습니다

<appender name="SOME_LOG" class="org.apache.log4j.RollingFileAppender"> 
<param name="Encoding" value="UTF-8" /> 

또한,이해야 정확하게 문자를 표시하기 위해 설치 적절한 캐릭터.