Stream 인코딩 바꾸기

제 블로그 RSS URL을 날리면 어떤 HTML이 날아오는지 보고 싶습니다.

String request – “http://whiteship.tistory.com”;
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();

이렇게 커넥션 객체를 생성한 다음에.. 이 커넥션에서 다시 InputStream을 얻어서 다시 아래 처럼 InputStreamReader로 그리고 이걸 다시 버퍼를 사용해서 읽을 수 있도록 BufferedReader에 연결 시킵니다.[footnote]정말 이 부분은 외워 지지가 않네요. 매번 코드를 찾아보게 되는 부분입니다.[/footnote]

BufferedReader br = BufferedReader(new InputStreamReader(connection.getInputStream()));

그리고 이후에는 br.readLine() 으로 한줄씩 읽어서 StringBuilder에 쌓아 뒀다가 출력해보면 됩니다.

그렇게 해봤습니다.
[#M_ more.. | less.. | <?xml version=”1.0″ encoding=”UTF-8″?>
<rss version=”2.0″>
    <channel>
        <title>Whiteship&#039;s Note</title>
        <link>http://whiteship.tistory.com/</link>
        <description>?뻾蹂듯븳 媛쒕컻?옄媛? ?릺?졄?땲?떎.</description>
        <language>ko</language>
        <pubDate>Tue, 27 Feb 2007 23:16:34 +0900</pubDate>
        <generator>Tistory 1.1</generator>
        <image>
        <title>Whiteship&#039;s Note</title>
        <url><![CDATA[http://fs.tistory.com/attach/8148/1301078737.gif]]></url>
        <link>http://whiteship.tistory.com/</link>
        <description>?뻾蹂듯븳 媛쒕컻?옄媛? ?릺?졄?땲?떎.</description>
        </image>
        <item>
            <title>DAUM 留ㅼ돩?뾽 ?썑湲?</title>
            <link>http://whiteship.tistory.com/504</link>
            <description>?쑕.. ?뾼泥??궃 ?뿰媛뺤쓣 ?뱽怨? ?솕?뜑?땲 ?뵾怨ㅽ븯?꽕?슂. 5?떆 10遺? 遺??꽣 9?떆源뚯?? ?씠?뼱吏? 媛뺤쓽????뒿?땲?떎. ?꽕?씠踰꾩?? DAUM?쓽 ?삤?뵂API ?궗?슜踰뺢낵 ?떎?젣 ?삁?젣 肄붾뱶瑜? 蹂댁뿬 二쇱뀲?뒿?땲?떎. ?궗?떎 ?쟾 硫섑넗媛? ?쁿?뿉 遺숈뼱?꽌 ?떎?뒿?쓣 ?뻽?떎?뒗 吏??궃 25?씪?뿉 李몄뿬瑜? ?븯怨? ?떢?뿀?뒗?뜲 ?뿬?뻾?쓣 媛??빞?븯湲? ?븣臾몄뿉 ?븘?돺寃? 媛뺤쓽留? ?엳?뒗 ?삤?뒛?씠?씪?룄 李몄뿬?빐?꽌 ?떎?쓬 留ㅼ돩?뾽?쓽 遺꾩쐞湲곕?? ?뙆?븙?뻽?떎?뒗 寃껋쑝濡? 留뚯”?빐?빞 寃좎뒿?땲?떎. 媛뺤쓽媛? ?엳?뒗 諛⑹씠 ?쑀由щ줈 ?몮?윭 ?뙎?뿬 ?엳?뼱?꽌 諛뽰씠 蹂댁???뒗?뜲 ?뒭??? ?떆媛꾩뿉?룄 ?뿴?떖?엳 ?씪..&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://whiteship.tistory.com/504&quot;&gt;湲? ?쟾泥대낫湲?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
            <category>Thinking</category>
            <category>?떎?쓬 留ㅼ돩?뾽</category>
            <author>湲곗꽑</author>
            <guid>http://whiteship.tistory.com/504</guid>
            <comments>http://whiteship.tistory.com/504#entry504comment</comments>
            <pubDate>Tue, 27 Feb 2007 23:14:06 +0900</pubDate>
        </item>

_M#]이상한 글씨들이 콘솔창에 출력됩니다. OTL..

인코딩 문제인데 구글신에게 물어보니까 InputStreamReader의 생성자를 이용해서 인코딩을 바꿀 수 있다고 합니다. 현재 인코딩을 찍어보니까[footnote]InputStreamReader의 String getEncoding()을 사용하면됩니다.[/footnote] MS949라고 출력됩니다.

RSS나 기타 오픈API를 사용한 결과물은 UTF-8을 사용한다고 합니다. 그리고 InputStreamReader의 생성자를 보니까 다음과 같이 네개의 생성자가 있었습니다.
사용자 삽입 이미지
이 중에서 제일 아래 녀석을 사용해서 다음과 같이 수정해 줍니다.

br = BufferedReader(new InputStreamReader(connection.getInputStream(), “UTF-8”));

결과물을 확인해 보니 제대로 출력이 되는 걸 볼 수 있었습니다.
[#M_ more.. | less.. | <?xml version=”1.0″ encoding=”UTF-8″?>
<rss version=”2.0″>
    <channel>
        <title>Whiteship&#039;s Note</title>
        <link>http://whiteship.tistory.com/</link>
        <description>행복한 개발자가 되렵니다.</description>
        <language>ko</language>
        <pubDate>Tue, 27 Feb 2007 23:16:34 +0900</pubDate>
        <generator>Tistory 1.1</generator>
        <image>
        <title>Whiteship&#039;s Note</title>
        <url><![CDATA[http://fs.tistory.com/attach/8148/1301078737.gif]]></url>
        <link>http://whiteship.tistory.com/</link>
        <description>행복한 개발자가 되렵니다.</description>
        </image>
        <item>
            <title>DAUM 매쉬업 후기</title>
            <link>http://whiteship.tistory.com/504</link>
            <description>휴.. 엄청난 연강을 듣고 왔더니 피곤하네요. 5시 10분 부터 9시까지 이어진 강의였습니다. 네이버와 DAUM의 오픈API 사용법과 실제 예제 코드를 보여 주셨습니다. 사실 전 멘토가 옆에 붙어서 실습을 했다는 지난 25일에 참여를 하고 싶었는데 여행을 가야하기 때문에 아쉽게 강의만 있는 오늘이라도 참여해서 다음 매쉬업의 분위기를 파악했다는 것으로 만족해야 겠습니다. 강의가 있는 방이 유리로 둘러 쌓여 있어서 밖이 보였는데 늦은 시간에도 열심히 일..&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://whiteship.tistory.com/504&quot;&gt;글 전체보기&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
            <category>Thinking</category>
            <category>다음 매쉬업</category>
            <author>기선</author>
            <guid>http://whiteship.tistory.com/504</guid>
            <comments>http://whiteship.tistory.com/504#entry504comment</comments>
            <pubDate>Tue, 27 Feb 2007 23:14:06 +0900</pubDate>
        </item>

_M#]

DAUM 매쉬업 후기

휴.. 엄청난 연강을 듣고 왔더니 피곤하네요.

5시 10분 부터 9시까지 이어진 강의였습니다. 네이버와 DAUM의 오픈API 사용법과 실제 예제 코드를 보여 주셨습니다. 사실 전 멘토가 옆에 붙어서 실습을 했다는 지난 25일에 참여를 하고 싶었는데 여행을 가야하기 때문에 아쉽게 강의만 있는 오늘이라도 참여해서 다음 매쉬업의 분위기를 파악했다는 것으로 만족해야 겠습니다.

강의가 있는 방이 유리로 둘러 쌓여 있어서 밖이 보였는데 늦은 시간에도 열심히 일하고 계신 개발자 분들을 보며.. 이 곳에도 야근은 상식인걸까? 라는 의문이 생겼지만 질문을 해보진 못했습니다. 그리고 아웃백에서 도시락을 만들어 준다는 걸 처음으로 알았습니다. 양은 적었지만 맛있었습니다.

기억에 남는 내용은…”매쉬업 = API + (API) + 새로운 가치” 라는 것. 이걸 그림으로 나타내면..

사용자 삽입 이미지이렇게 사용자가 요청을 보내면 그 요청을 바탕으로 자기가 사용할 오픈 API 서버에 REST나 XML RPC 방식으로 다시 요청을 보내면 주로 RSS 형태로 결과를 받게 되는데 이걸 XML 파서로 받아서 원하는 처리(CSS로 옷을 입히고 원하는 서비스로 데이터를 가공 한다든지..)를 해서 사용자에게 보여주게 됩니다.

무엇을 만들지.. 자면서 생각해 봐야겠네요.