2010-12-17 3 views
1

저는 RSS 피드 파서를 자바로 작성하고 아랍어/중국어/일본어 문자가있는 피드를 파싱하는 동안 문제가 발생했습니다. Example feed아랍어/중국어/일본어 RSS 피드를 자바로 파싱

나는 그들을 인쇄 할 때 단지 물음표가 "?????? ???? ?????"라고 표시됩니다.

그들은 내 데이터베이스 (최대 절전 모드로 연결되어, utf8 인코딩으로 설정되어있다)도 결국 그렇게합니다.

이 피드에서 제목을 받고 담당하는 코드의 일부 :

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 

Document doc = db.parse(url.openStream()); 
doc.getDocumentElement().normalize(); 

Node channelNode = doc.getElementsByTagName("channel").item(0); 

NodeList channelList = channelNode.getChildNodes(); 

for (int i = 0; i < channelList.getLength(); i++) { 
    Node element = channelList.item(i); 

    String name = element.getNodeName(); 

    if (name.equalsIgnoreCase("title")) { 
    rssName = element.getTextContent(); 
    break; 
    } 
} 

어떻게 데이터베이스에 적절한 문자를 얻는 방법? 피드에서 복사하여 데이터베이스에 수동으로 삽입하면됩니다.

고맙습니다

UPDATE

:
이 문제를 해결 내 최대 절전 모드 설정에 추가 라인을 퍼팅 :

<property name="hibernate.connection.useUnicode">true</property> 
<property name="hibernate.connection.characterEncoding">UTF-8</property> 
+0

해당 문자를 인쇄하려면 글꼴을 설치해야합니까? – rvdginste

+0

@rubenvdg : 해당 문자에 대한 글꼴이 없으면 검정색 테두리가있는 빈 흰색 사각형이나 특정 응용 프로그램 (일부 웹 브라우저)에서 [유니 코드 대체 문자]를 보았을 것입니다 (http://www.fileformat.info/info /unicode/char/fffd/index.htm), 확실히 물음표는 아닙니다. – BalusC

+0

@BalusC : 문맥에 따라 다르다고 생각했는데 실수가 아니라면 리눅스 터미널 창에 물음표가 나타날 수 있습니다. 어쨌든 내 말을 신경 쓰지 마라. 나는 "수동으로 삽입"에 대한 마지막 문장을 놓쳤다. – rvdginste

답변

3

는 다음과 같은 PARAMS를 포함하는 최대 절전 모드 구성에서 MySQL의 JDBC URL을 변경해야합니다

jdbc:mysql://hostname:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

그렇지 않으면 MySQL의 JDBC 드라이버가 클라이언트 플랫폼의 기본 인코딩을 사용합니다.

수동 삽입이 잘 작동하므로 DB 인코딩이 정상적으로 작동합니다. XML은 대개 기본적으로 UTF-8로 파싱되므로 일부분은 괜찮습니다 (XML 피드 헤더에 명시 적으로 달리 지정되지 않은 경우 RSS 피드 서버의 실수 일 수 있습니다).

+0

그래, 네가 옳았 어, 내 최대 절전 모드 구성에 없었어 :) – darkhie

+0

당신은 오신 것을 환영합니다. – BalusC

+0

이미 hibernate.cfg.xml에이 행이 있습니다. 문제가 해결되지 않았습니다. 이 예를 사용합니다. -> http://www.mkyong.com/spring-mvc/spring-3-mvc-and-rss-feed-example/ –

0

데이터베이스의 문자 인코딩은 문자와 호환되는지 확인해야합니다. UTF-8로 구성하면됩니다.

데이터베이스 문자 인코딩이 문자를 처리 할 수없는 경우?로 변환됩니다.

대부분의 데이터베이스는 전체 기본 인코딩을 가지며 테이블 당 및 열 우선 적용을 허용합니다.

들어오는 스트림을 올바르게 구문 분석해야합니다 (예 : UTF-8 또는 인코딩이 지정하는대로).

-1

분명히 인코딩 문제입니다. UTF-8 charset을 사용하여 RSS 스트림을 디코딩해야합니다.

+0

아니요, 안됩니다. 다른 문자 세트가 XML 헤더에 지정되면 XML 파서가 UTF-8을 사용하도록 강요하면 데이터가 손상됩니다. – jarnbjo

관련 문제