<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OddPoet&#039;s βetalog &#187; 웹</title>
	<atom:link href="http://oddpoet.net/archives/category/web/feed" rel="self" type="application/rss+xml" />
	<link>http://oddpoet.net</link>
	<description>디지털과 아나로그의 경계에 서서...</description>
	<lastBuildDate>Mon, 12 Jul 2010 20:34:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tomcat에서 한글파라메터 인코딩 처리</title>
		<link>http://oddpoet.net/archives/62</link>
		<comments>http://oddpoet.net/archives/62#comments</comments>
		<pubDate>Thu, 04 Feb 2010 08:07:31 +0000</pubDate>
		<dc:creator>OddPoet</dc:creator>
				<category><![CDATA[개발]]></category>
		<category><![CDATA[웹]]></category>
		<category><![CDATA[EUC-KR]]></category>
		<category><![CDATA[ISO-8859-1]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MS949]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[UTF8]]></category>
		<category><![CDATA[한글 인코딩]]></category>

		<guid isPermaLink="false">http://oddpoet.net/?p=62</guid>
		<description><![CDATA[요즘 대부분 웹페이지의 한글페이지는 UTF-8로 개발되는 추세지만, EUC-KR로 개발된 사이트를 UTF-8로 전환하려고 하는 경우 외부에서의 링크 등 때문에 Request의 파라메터에 대해서 UTF-8과 EUC-KR을 모두 지원해야할 경우가 종종 있습니다. 하지만 Java는 PHP 등과는 달리 String을 byte array로 보는게 아니라, byte array를 decoding해서 유니코드로 처리하므로 Tomcat의 character encoding 설정 만으로는 파라메터에 대해서 UTF-8과 EUC-KR을 모두 지원할 수 [...]]]></description>
			<content:encoded><![CDATA[<p>요즘 대부분 웹페이지의 한글페이지는 UTF-8로 개발되는 추세지만, EUC-KR로 개발된 사이트를 UTF-8로 전환하려고 하는 경우 외부에서의 링크 등 때문에 Request의 파라메터에 대해서 UTF-8과 EUC-KR을 모두 지원해야할 경우가 종종 있습니다. 하지만 Java는 PHP 등과는 달리 String을 byte array로 보는게 아니라, byte array를 decoding해서 유니코드로 처리하므로 Tomcat의 character encoding 설정 만으로는 파라메터에 대해서 UTF-8과 EUC-KR을 모두 지원할 수 없습니다. 이런 상황에서 써볼 수 있는 팁을 정리해봅니다. <span id="more-62"></span></p>
<h3>가정</h3>
<ol>
<li>한글 인코딩은  UTF-8, EUC-KR(MS949) 만 고려합니다.</li>
<li>EUC-KR과 MS949가 동일한 character set은 아니지만, MS949가 EUC-KR의 확장이므로 이 글에서는 동일하게 취급합니다.</li>
<li>UTF8에 대해서는 국내에서 일반적인 다국어 환경(한글/영어 등)만 가정합니다.</li>
</ol>
<h3>Byte array 얻어내기</h3>
<p>UTF-8 으로 encoding된 byte array를 EUC-KR로 decoding해서 String 객체를 생성해버리면(반대의 경우도 마찬가지), 최상위 비트가 이미 손실된 상황이므로 String 객체 만으로는 한글 인코딩을 바꿔 다시 디코딩할 방법이 없습니다. 따라서 request parameter의 한글인코딩을 판단하고, 그에 맞는 적절한 인코딩 방법으로 parameter에 대한 String 객체를 생성하기 위해서는 우선적으로 parameter에 대한 String 객체가 아닌 byte array를 얻어낼 수 있어야 합니다.</p>
<p>그런데 문제는 HttpServletRequest에 request에 대한 byte array를 얻어낼 인터페이스가 없다는 점이죠. GET method의 Request의 경우 URL 정보에서 직접 파라메터를 파싱해내는 방법도 적용해볼 수 있지만, POST method의 요청에서는 그것도 불가능합니다. 게다가 GET인 경우에도 IE계열의 경우에는 uri encoding도 하지 않은 채로 보내주는 막강센스를 보여주기 때문에 로직이 좀 짜증이 납니다.</p>
<p>그래서 byte array를 얻어내기 위해서 저는 request에 characterEncoding을 &#8220;ISO-8859-1&#8243; 를 사용합니다. 그렇게 하면, String에서 원래 byte array를 얻어낼 수 있습니다.</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?" onclick="pageTracker._trackPageview('/outgoing/www.ericbess.com/ericblog/2008/03/03/wp-codebox/_examples?referer=');"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p62code6'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p626"><td class="code" id="p62code6"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">byte</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> barray<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// EUC-KR encoded byte array</span>
...
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a> ko2 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#40;</span>barray, <span style="color: #0000ff;">&quot;ISO-8859-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">byte</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> barray2 <span style="color: #339933;">=</span> ko.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ISO-8859-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// barray2 is same as barray.</span>
&nbsp;
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a> ko2 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#40;</span>barray, <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">byte</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> barray3 <span style="color: #339933;">=</span> ko2.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// barray3 may be not same as barray.</span></pre></td></tr></table></div>

<p>tomcat의 경우 HttpServletRequest 객체에 처음으로 getParameter() 메소드를 호출할 때, paramter들의 파싱이 이루어지므로 첫번째 Filter에서 아래와 같은 코드로 전체 파라메터를 ISO-8859-1 로 decoding해서 String 객체를 생성하도록  할 수 있습니다.</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?" onclick="pageTracker._trackPageview('/outgoing/www.ericbess.com/ericblog/2008/03/03/wp-codebox/_examples?referer=');"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p62code7'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p627"><td class="code" id="p62code7"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>isMultiPart<span style="color: #009900;">&#40;</span>request<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	request.<span style="color: #006633;">setCharacterEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ISO-8859-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// byte array으로 변환하기 위해 ISO-8859-1로 설정함.</span>
	request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;dummy&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// parameter parsing을 위해서 getParameter 호출</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>자~ 그럼 파라메터에서 byte array를 다음과 같은 형태로 얻어낼 수 있겠죠?</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?" onclick="pageTracker._trackPageview('/outgoing/www.ericbess.com/ericblog/2008/03/03/wp-codebox/_examples?referer=');"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p62code8'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p628"><td class="code" id="p62code8"><pre class="java" style="font-family:monospace;"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a> query <span style="color: #339933;">=</span> request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;query&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">byte</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bQuery <span style="color: #339933;">=</span> query.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ISO-8859-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 원래의 byte array를 얻음.</span></pre></td></tr></table></div>

<h3>UTF-8 인지 EUC-KR인지 판별하기</h3>
<p>byte array를 가져 왔으니 byte sequence로 부터 한글 인코딩을 판별해내야겠지요.</p>
<p>php 등의 스크립트 언어에서는 iconv 같은 함수들을 썼겠지만, 아시다시피 그런 방식으로는 한글 인코딩을 완전하게 판별할 수 없습니다. 왜냐하면 UTF-8 한글과 EUC-KR(MS949)와는 코드영역이 겹치는 부분이 있기 때문입니다. 예를 들면, &#8220;<em>천호</em>&#8220;, &#8220;<em>치킨</em>&#8221; 같은 단어들이죠.</p>
<ul>
<li>UTF-8 코드영역 : <a href="http://ko.wikipedia.org/wiki/UTF-8" onclick="pageTracker._trackPageview('/outgoing/ko.wikipedia.org/wiki/UTF-8?referer=');">http://ko.wikipedia.org/wiki/UTF-8</a></li>
<li>UTF-8 byte sequence에 대한 정규식 : <a href="http://www.w3.org/International/questions/qa-forms-utf-8.en.php" onclick="pageTracker._trackPageview('/outgoing/www.w3.org/International/questions/qa-forms-utf-8.en.php?referer=');">http://www.w3.org/International/questions/qa-forms-utf-8.en.php</a></li>
<li>MS949 코드영역 : <a href="http://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%ED%8E%98%EC%9D%B4%EC%A7%80_949" onclick="pageTracker._trackPageview('/outgoing/ko.wikipedia.org/wiki/_EC_BD_94_EB_93_9C_ED_8E_98_EC_9D_B4_EC_A7_80_949?referer=');">http://ko.wikipedia.org/wiki/코드_페이지_949</a></li>
</ul>
<p>위의 링크를 참고하면, UTF-8의 <em>non-overlong 2-byte</em> 영역이 MS949의 코드 영역과 겹치는 걸 확인 할 수 있습니다. 즉, &#8220;<em>치킨</em>&#8220;이라는 단어의 경우 UTF8로 인코딩하면 <strong>EC.B9.98.ED.82.A8</strong> 인데 이 byte sequence는 UTF-8 인코딩에도 valid하며, MS949 인코딩에도 valid 합니다. 결론적으로 byte sequence 만으로는 UTF-8인지, EUC-KR인지 완벽하게 판별가능한 방법은 없다는 얘기입니다. (iconv 역시 마찬가지입니다.)</p>
<p>그래서 여기에 3번째 가정을 적용합니다. 위의 첫번째 링크(Wikipedia: UTF-8)의 내용 중에 아래와 같은 내용이 있습니다.</p>
<blockquote><p>그 다음 1920문자 &#8211; 발음 구별 기호가 붙은 라틴 문자, 그리스 문자, 키릴 문자, 콥트 문자, 아르메니아 문자, 히브리 문자, 아랍 문자 &#8211; 는 2바이트로 표시되며&#8230;</p></blockquote>
<p>UTF-8 코드영역에서 이 부분이 바로 <em>non-overlong 2-byte</em> 에 해당하는 부분입니다. 일반적으로 자주 쓰는 문자들은 아닌것 같죠? 이 코드 영역을 쓰지 않는다는 가정을 하면, 한글에 있어서는 완전하게 UTF-8과 EUC-KR 중 어떤 인코딩으로 encode된 byte array인지 판별가능합니다.</p>
<p>byte sequence에 대한 한글 UTF-8 여부를 판별하는 코드는 아래에 있습니다. 참고로 전체를 정규식으로 로직을 쓸 경우, 큰 byte array에 대해서 Stack overflow가 발생하기 때문에 아래와 같이 byte 별로 쪼개어 test했습니다.</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?" onclick="pageTracker._trackPageview('/outgoing/www.ericbess.com/ericblog/2008/03/03/wp-codebox/_examples?referer=');"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p62code9'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p629"><td class="code" id="p62code9"><pre class="java" style="font-family:monospace;"><span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * 문자열이 UTF8 Character인지 검사하는 Utility Class.
 * &lt;p&gt;
 * byte arry 및 최상위 비트가 보존된 iso-8859-1로 decoding 문자열에 대한 체크만 가능하다. 
 * 한마디로, 이미 깨진 한글 따윈 검증할 수 없다. 
 * &lt;/p&gt;
 * &lt;p&gt;
 * utf8 문자셋에 대한 정규식. 
 * &lt;br/&gt;
 * MS949와 충돌나는 코드 영역 때문에, 2byte로 인코딩되는 문자들은 제외한다. (e.g. 치킨)
 * 한글 유니코드는 모두 /u0800 보다 큰 코드값에 배열되므로, 
 * utf8 인코딩시 2바이트로 인코딩되는 일이 없다. (첫자끝, 한글자모도 동일함)
 * 물론, 이렇게 함으로써 해당 코드영역을 사용하는 타언어의 코드를 체크할 수 없다. 
 * &lt;/p&gt;
 * 
 * 관련 정보 : 
 * 	1. http://ko.wikipedia.org/wiki/UTF-8
 *  2. http://forum.standardmag.org/viewtopic.php?id=462 
 * 
 * @see http://www.w3.org/International/questions/qa-forms-utf-8.en.php
 * 
 * @author oddpoet
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000000; font-weight: bold;">class</span> UTF8KoreanChecker <span style="color: #009900;">&#123;</span>
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Utility Class이므로 생성자를 막는다. 
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> UTF8KoreanChecker<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * 주어진 byte array가 한글 UTF8 인코딩인지 체크한다. 
	 *  
	 * @param bytes bytes
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isUTF8Korean<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> bytes.<span style="color: #006633;">length</span><span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isAscii<span style="color: #009900;">&#40;</span>bytes, i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				i <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 1byte 체크함. </span>
				<span style="color: #000000; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">/*
			 * 위에서 언급한 바처럼, UTF-8 인코딩의 2바이트 영역이 MS949와 겹치므로, 
			 * 한글 UTF8 검증에는 사용하지 않는다. 
			 * 게다가 한글 UTF8은 2바이트로 인코딩되는 경우가 없으므로, 
			 * 한글에 한해서는 체크는 완전하게 가능하다. 
			} else if (isNonOverlong(bytes, i)) {
				i += 2; 
				continue; 
			}
			 */</span>
&nbsp;
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isExcludeOverlogs<span style="color: #009900;">&#40;</span>bytes, i<span style="color: #009900;">&#41;</span> 
				<span style="color: #339933;">||</span> isExcludingSurrogates<span style="color: #009900;">&#40;</span>bytes, i<span style="color: #009900;">&#41;</span> 
				<span style="color: #339933;">||</span> isStraight<span style="color: #009900;">&#40;</span>bytes, i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				i <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3byte 체크함. </span>
				<span style="color: #000000; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isPlane1to3<span style="color: #009900;">&#40;</span>bytes, i<span style="color: #009900;">&#41;</span> 
				<span style="color: #339933;">||</span> isPlane4to15<span style="color: #009900;">&#40;</span>bytes, i<span style="color: #009900;">&#41;</span> 
				<span style="color: #339933;">||</span> isPlane16<span style="color: #009900;">&#40;</span>bytes, i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				i <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 3byte 체크함. </span>
				<span style="color: #000000; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * (1byte)ascii ([\\x09\\x0A\\x0D\\x20-\\x7E])
	 * @param bytes bytes
	 * @param index 체크시작할 바이트 
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isAscii<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes, <span style="color: #000066; font-weight: bold;">int</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x09 
			<span style="color: #339933;">||</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x0A 
			<span style="color: #339933;">||</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x0D 
			<span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x20 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x7E
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * (3bytes) excluding overlogs (\\xE0[\\xA0-\\xBF][\\x80-\\xBF])
	 * @param bytes bytes
	 * @param index index
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isExcludeOverlogs<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes, <span style="color: #000066; font-weight: bold;">int</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">&lt;</span> bytes.<span style="color: #006633;">length</span> 
			<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xE0 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xA0 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * (3bytes) straight ([\\xE1-\\xEC\\xEE\\xEF][\\x80-\\xBF]{2})
	 * @param bytes bytes
	 * @param index index
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isStraight<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes, <span style="color: #000066; font-weight: bold;">int</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">&lt;</span> bytes.<span style="color: #006633;">length</span> 
				<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>
					<span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xE1 
						<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xEC
					<span style="color: #009900;">&#41;</span> 
					<span style="color: #339933;">||</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xEE 
					<span style="color: #339933;">||</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xEF
				<span style="color: #009900;">&#41;</span>
				<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
					<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
				<span style="color: #009900;">&#41;</span> 
				<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
					<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
				<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * (3bytes) excluding surrogates (\\xED[\\x80-\\x9F][\\x80-\\xBF])
	 * @param bytes bytes
	 * @param index index
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isExcludingSurrogates<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes, <span style="color: #000066; font-weight: bold;">int</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">&lt;</span> bytes.<span style="color: #006633;">length</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xED<span style="color: #009900;">&#41;</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x9F
			<span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * (4bytes)planes 1-3 (\\xF0[\\x90-\\xBF][\\x80-\\xBF]{2})
	 * @param bytes bytes
	 * @param index index
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isPlane1to3<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes, <span style="color: #000066; font-weight: bold;">int</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span> <span style="color: #339933;">&lt;</span> bytes.<span style="color: #006633;">length</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xF0<span style="color: #009900;">&#41;</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x90 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * planes 4-15 ([\\xF1-\\xF3][\\x80-\\xBF]{3})
	 * @param bytes bytes
	 * @param index index
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isPlane4to15<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes, <span style="color: #000066; font-weight: bold;">int</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span> <span style="color: #339933;">&lt;</span> bytes.<span style="color: #006633;">length</span> <span style="color: #666666; font-style: italic;">// 4byte check</span>
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xF1 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xF3
			<span style="color: #009900;">&#41;</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * (4bytes)plane 16 (\\xF4[\\x80-\\x8F][\\x80-\\xBF]{2})
	 * @param bytes bytes
	 * @param index index
	 * @return true/false
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> isPlane16<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes, <span style="color: #000066; font-weight: bold;">int</span> index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span> <span style="color: #339933;">&lt;</span> bytes.<span style="color: #006633;">length</span> <span style="color: #666666; font-style: italic;">// 4byte check</span>
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xF4<span style="color: #009900;">&#41;</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x8F
			<span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span> 
			<span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0x80 
				<span style="color: #339933;">&amp;&amp;</span> bytes<span style="color: #009900;">&#91;</span>index <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span>0xBF
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * (2bytes)non-overlong ([\\xC2-\\xDF][\\x80-\\xBF])
	 * 이 코드 영역은 MS949와 겹치는 영역이므로, 한글 검증용으로 사용하지 않는다. 
	 * 
	 * UTF8 한글의 경우 2byte로 인코딩되는 경우가 없음. 
	 * 
	 * @param bytes bytes
	 * @param index index
	 * @return true/false
	 */</span>
	<span style="color: #666666; font-style: italic;">/* 사용하지 않으므로 주석처리. 
	private static boolean isNonOverlong(byte[] bytes, int index) {
		return index + 1 &lt; bytes.length // 2byte check
			&amp;&amp; bytes[index] &gt;= (byte)0xC2 &amp;&amp; bytes[index] &lt;= (byte)0xDF
			&amp;&amp; bytes[index + 1] &gt;= (byte)0x80 &amp;&amp; bytes[index + 1] &lt;= (byte)0xBF;
	}
	*/</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>정리</h3>
<p>byte array를 얻어서, 사용된 encoding을 판별하고 나면 아래와 같은 방법으로 적절한 encoding을 사용해서 한글 String 객체를 만들어 낼 수 있습니다.</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?" onclick="pageTracker._trackPageview('/outgoing/www.ericbess.com/ericblog/2008/03/03/wp-codebox/_examples?referer=');"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p62code10'); return false;">View Code</a> JAVA</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p6210"><td class="code" id="p62code10"><pre class="java" style="font-family:monospace;"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a> param <span style="color: #339933;">=</span> request.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;param&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">byte</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes <span style="color: #339933;">=</span> param.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ISO-8859-1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a> koparam<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>UTF8KoreanChecker.<span style="color: #006633;">isUTF8Korean</span><span style="color: #009900;">&#40;</span>bytes<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	koparam <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#40;</span>bytes, <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
	koparam <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3Astring+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#40;</span>bytes, <span style="color: #0000ff;">&quot;MS949&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://oddpoet.net/archives/62/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>구글이 말하는 개방의 진짜 의미는?</title>
		<link>http://oddpoet.net/archives/43</link>
		<comments>http://oddpoet.net/archives/43#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:30:54 +0000</pubDate>
		<dc:creator>OddPoet</dc:creator>
				<category><![CDATA[웹]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[the meaning of open]]></category>
		<category><![CDATA[개방의 의미]]></category>

		<guid isPermaLink="false">http://oddpoet.net/?p=43</guid>
		<description><![CDATA[지난 2009년 12월에 구글의 제품관리 총괄 임원 조나단 로젠버그(Jonathn Rosenberg) 가 공식블로그를 통해 &#8216;The meaning of open&#8216; 이라는 글을 올렸습니다. 이 글은 구글 공식 한국블로그에서  &#8217;개방(Open)의 의미&#8216; 라는 제목으로도 번역되어 올라왔습니다. 구글이 가지고 있는 개방에 대한 철학을 Open technology, Open Information 측면에서 잘 설명하고 있는 글입니다.
구글이 Open이라는 철학으로 기술적인 부분에서나 정보에 대한 접근에 있어서나 사용자들과 개발자들에게 지지를 [...]]]></description>
			<content:encoded><![CDATA[<p>지난 2009년 12월에 구글의 제품관리 총괄 임원 조나단 로젠버그(Jonathn Rosenberg) 가 공식블로그를 통해 &#8216;<a href="http://googleblog.blogspot.com/2009/12/meaning-of-open.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/googleblog.blogspot.com/2009/12/meaning-of-open.html?referer=');">The meaning of open</a>&#8216; 이라는 글을 올렸습니다. 이 글은 구글 공식 한국블로그에서  &#8217;<a href="http://googlekoreablog.blogspot.com/2010/01/blog-post_6951.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/googlekoreablog.blogspot.com/2010/01/blog-post_6951.html?referer=');">개방(Open)의 의미</a>&#8216; 라는 제목으로도 번역되어 올라왔습니다. 구글이 가지고 있는 개방에 대한 철학을 Open technology, Open Information 측면에서 잘 설명하고 있는 글입니다.</p>
<p>구글이 Open이라는 철학으로 기술적인 부분에서나 정보에 대한 접근에 있어서나 사용자들과 개발자들에게 지지를 받는 IT기업임은 분명합니다. 그리고 그들의 말대로 Open이야말로 웹 전체의 가치를 높이고, 웹이 많은 사람들에게 도움이 될 수 있는 전략이라는 것도 맞는 이야기 입니다.</p>
<p>하지만 달리 바라보면 사용자들의 검색어와 컨텐츠를 광고주에게 연결해서 수익을 만들어내는 구글에게 있어서, Open이란 웹에 공유되는 정보들과 컨텐츠를 늘려 자신들의 가치를 높일 수 있는 <strong>궁극의 전략</strong>이기도 합니다. 다른 이들에게도 도움이 되겠지만, 구글에게는 아주 큰 수익이 되는거죠. <span id="more-43"></span></p>
<p>IE, Firefox, Safari, Opera 등이 신기능으로 경쟁을 하고 있을 때,  Chrome을 출시해서 갑자기 브라우저 성능(속도)을 이슈화시킨 이유가 무엇일까요? 페이지뷰의 증가와 광고수익이 비례한다는 가정을 하면, 그건 브라우저들의 전반적인 성능을 높여 사용자들의 단위시간당 페이지 소비량를 높이는 것이 구글의 수익에 도움이 되기 때문일겁니다.  구글은 이미 웹에서의 게임의 법칙을 주도하고 있는 회사이므로, 웹이 더 커질 수록, 사용자들의 페이지뷰가 많아질수록 수익은 늘어납니다. 조금 냉정하게 보면 &#8216;<em>더 많이 정보를 만들어내고 공유해라. 기술도 주마. 돈은 내가 벌테니</em>&#8216;&#8230; 이런 거죠. 안드로이드 역시 아이폰에 대항할 무기가 없는 H/W 제조사들을 위한 떡밥이자, 모바일에서도 게임의 법칙을 주도하겠다는 야심으로 만들어진 플랫폼이구요.</p>
<p><a href="http://www.appleforum.com/mac-column/58550-%EC%96%B8%EB%A1%A0%EC%9D%98-%EC%A0%81-%EA%B5%AC%EA%B8%80.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.appleforum.com/mac-column/58550-_EC_96_B8_EB_A1_A0_EC_9D_98-_EC_A0_81-_EA_B5_AC_EA_B8_80.html?referer=');">&#8220;언론의 적 구글&#8221;</a> 이라는 글에서  구글의 이해와 충돌하고 있는 신문사와 출판사들의 경우를 보면, Open이라는 그들의 철학이 다소 위선처럼 느껴지네요. (물론 이 예는 전세대 미디어가 인터넷 시대에 수익구조를 만들어내지 못하고 붕괴하는 모습으로도 볼 수 있지요. ^^ ) 몇일전 스티브 잡스가 &#8216;Don&#8217;t be evil&#8217;이라는 구글의 모토를 &#8216;bullshit&#8217;이라 욕한데에는 이러한 부분에 대한 지적이라 생각합니다. 애플은 iTunes를 통해 컨텐츠 사업자들과 수익을 나누고 있으니까요.</p>
<p>구글이라는 회사를 좋아하고 구글의 서비스를 삶의 일부로 사용하고 있지만, 가끔씩 구글은 이미  Big brother가 되어버린건 아닌지 하는 섬뜩한 생각이 듭니다. 구글에서 evil이라는 단어가 검색되지 않는 날이 온다면 &#8230; 그게 그때 이겠지요?</p>
]]></content:encoded>
			<wfw:commentRss>http://oddpoet.net/archives/43/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash, HTML5, 그리고 mobile</title>
		<link>http://oddpoet.net/archives/34</link>
		<comments>http://oddpoet.net/archives/34#comments</comments>
		<pubDate>Mon, 01 Feb 2010 05:43:17 +0000</pubDate>
		<dc:creator>OddPoet</dc:creator>
				<category><![CDATA[모바일]]></category>
		<category><![CDATA[웹]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://oddpoet.net/?p=34</guid>
		<description><![CDATA[HTML5에서 동영상 태그 지원, 2D drawing를 지원하게되면서 Adobe의 Flash같은 브라우저 플러그인 기반의 기술들의 미래에 대한 얘기가 작년에 회자되었는데요, 최근 유튜브의 HTML5 지원과 스티브 잡스의 발언으로 다시 이슈가 되고 있네요.

HTML5 : 플래시와 실버라이트를 물리칠 수 있을까?
유튜브 : HTML5 비디오 지원 &#8211; video 태그
스티브잡스 &#8220;구글의 모토는 헛소리&#8230; 어도비는 게을러&#8221;

Flash가 HTML5에 의해 완전히 대체될 거라고는 생각하지 않습니다만,  최신버전의 [...]]]></description>
			<content:encoded><![CDATA[<p>HTML5에서 동영상 태그 지원, 2D drawing를 지원하게되면서 Adobe의 Flash같은 브라우저 플러그인 기반의 기술들의 미래에 대한 얘기가 작년에 회자되었는데요, 최근 유튜브의 HTML5 지원과 스티브 잡스의 발언으로 다시 이슈가 되고 있네요.</p>
<ul>
<li><a href="http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=56850" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.idg.co.kr/newscenter/common/newCommonView.do?newsId=56850&amp;referer=');">HTML5 : 플래시와 실버라이트를 물리칠 수 있을까?</a></li>
<li><a href="http://barosl.com/blog/entry/youtube-launches-html5-beta" target="_blank" onclick="pageTracker._trackPageview('/outgoing/barosl.com/blog/entry/youtube-launches-html5-beta?referer=');">유튜브 : HTML5 비디오 지원 &#8211; video 태그</a></li>
<li><a href="http://blog.hankyung.com/kim215/339488" target="_blank" onclick="pageTracker._trackPageview('/outgoing/blog.hankyung.com/kim215/339488?referer=');">스티브잡스 &#8220;구글의 모토는 헛소리&#8230; 어도비는 게을러&#8221;</a></li>
</ul>
<p>Flash가 HTML5에 의해 완전히 대체될 거라고는 생각하지 않습니다만,  최신버전의 웹브라우저들과 유튜브가  HTML5의 동영상태그를 지원하기 시작했다는 점에 웹에서 Flash의 입지는 줄어들게 될 것 같습니다. 게다가 아이폰이 모바일 웹 트래픽의 대부분을 점유하고 있는 시점에서,  애플이 모바일 환경에서의 Flash를 부정적으로 생각하고 있다는 점은 Flash의 미래를 불투명하게 하는 또다른 요소가 되고 있습니다. <span id="more-34"></span></p>
<p>옛날부터 사연이 많은 Apple과 Adobe의 관계를 생각할 때 Apple이 모바일 점유율을 믿고 기싸움을 하는 것으로 볼 수도 있습니다만, 사실 다른 플랫폼은 둘째치고 윈도우 환경에서도 Flash가 실행될때 소모하는 엄청난 리소스 점유율 등을 볼 때 모바일 웹환경에서 Flash는 지양해야할 기술이라고 생각합니다. 웹표준이 추구했던 바가 다양한 환경에서 동일한 정보접근성을 제공하는 데 있었다는 점을 생각하면, 브라우저 플러그인 기반의 기술들은 어느정도 한계를 가질 수 밖에 없으며 언젠가는 서서히 웹에서의 영역이 줄어들 수 밖에 없을 겁니다.</p>
<p>Flash가  그동안 지적되었던 성능이나 리소스 점유율의 문제에 효과적으로 대응하지 못했다는 점에서, 다분히 감정적인 반응으로 보이는 잡스의 &#8216;어도비는 게을러&#8217;라는 얘기도 개인적으로는 어느 정도 공감이 갑니다.</p>
<p>추후 웹에서 시장을 주도하는 기술이 어떤 것이 될지는 모르겠지만, 모바일 시장에서의 승자가 유리한 고지를 차지할 것 같습니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://oddpoet.net/archives/34/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>구글 IE6 지원 중단, 그리나 한국의 웹은</title>
		<link>http://oddpoet.net/archives/11</link>
		<comments>http://oddpoet.net/archives/11#comments</comments>
		<pubDate>Sun, 31 Jan 2010 14:08:25 +0000</pubDate>
		<dc:creator>OddPoet</dc:creator>
				<category><![CDATA[웹]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE6]]></category>

		<guid isPermaLink="false">http://oddpoet.net/?p=11</guid>
		<description><![CDATA[구글이 올해 3월 1일부터 점진적으로 IE6에 대한 지원을 중단하기로 했다고 발표했습니다. 일단은 일부 서비스(Gmail, Google docs)에서 IE6가 지원가능 브라우저에서 제외되지만, 서서히 다른 서비스에서도 IE6는 지원목록에서 제외될 것 같습니다.
IE6가 윈도우즈XP의 기본브라우저로 2001년에 발표되었으니 아마도 가장 오랜시간동안 현역생활을 한 웹브라우저일 것 같네요. 그러한 이유에는 MS가 오랫동안 업데이트 없이 방치했던 것도 있었지만, 윈도우즈 비스타의 출시지연과 시장에서의 실패 등의 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/googleenterprise.blogspot.com/2010/01/modern-browsers-for-modern-applications.html?referer=');">구글이 올해 3월 1일부터 점진적으로 IE6에 대한 지원을 중단하기로 했다고 발표했습니다.</a> 일단은 일부 서비스(Gmail, Google docs)에서 IE6가 지원가능 브라우저에서 제외되지만, 서서히 다른 서비스에서도 IE6는 지원목록에서 제외될 것 같습니다.</p>
<p>IE6가 윈도우즈XP의 기본브라우저로 2001년에 발표되었으니 아마도 가장 오랜시간동안 현역생활을 한 웹브라우저일 것 같네요. 그러한 이유에는 MS가 오랫동안 업데이트 없이 방치했던 것도 있었지만, 윈도우즈 비스타의 출시지연과 시장에서의 실패 등의 상황들도 IE7 보급이 더뎌졌던 이유도 있었지요. 아뭏든 IE6는 윈도우즈 XP의 수명만큼이나 오랫동안(9년) 사용되고 있으니, 현대적인 브라우저의 관점에서는 백발성성한  노장입니다. 그런 면에서 구글의 이번 IE6 지원 중단 발표는 &#8216;신은 죽었다&#8217;고 한 니체의 얘기만큼이나 선언적으로 중요한 계기가 되리라 생각합니다. 다른 유명한 웹서비스들도 서서히 지원을 중단하면서 자연스레 IE6는 역사 속으로 사라지겠지요. <span id="more-11"></span></p>
<p>그!러!나! 한국에서 IE6가 언제쯤 사라질 수 있을까를 생각해보면 암담합니다.</p>
<div id="attachment_14" class="wp-caption aligncenter" style="width: 585px"><a rel="attachment wp-att-14" href="http://oddpoet.net/archives/11/2009-browser-trend"><img class="size-full wp-image-14" title="2009-browser-trend" src="http://oddpoet.net/wp-content/uploads/2010/01/2009-browser-trend.png" alt="2009년 한국 브라우저 버전별 점유율" width="575" height="211" /></a><p class="wp-caption-text">2009년 한국 브라우저 버전별 점유율</p></div>
<p>위 차트는 <a href="http://trend.logger.co.kr/introduction.tsp" target="_blank" onclick="pageTracker._trackPageview('/outgoing/trend.logger.co.kr/introduction.tsp?referer=');">InternetTrend </a>에서 뽑은 2009년 브라우져 버전별 점유율입니다. IE와 그의 형제들이 98% 넘는 점유율을 보이고 있는데, 세계적으로 30% 가까운 점유율을 보인다는 Firefox의 경우 한국에서는 개발자들만 쓰는 모양입니다. <strong>50%가 넘는 IE6의 점유율이 매우 인상적입니다. </strong></p>
<div id="attachment_15" class="wp-caption aligncenter" style="width: 693px"><a rel="attachment wp-att-15" href="http://oddpoet.net/archives/11/statcounterglobal"><img class="size-full wp-image-15 " title="StatCounterGlobal" src="http://oddpoet.net/wp-content/uploads/2010/01/StatCounterGlobal.jpg" alt="2009 세계 브라우저별 점유율" width="683" height="400" /></a><p class="wp-caption-text">2009 세계 브라우저 버전별 점유율</p></div>
<p><a href="http://gs.statcounter.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/gs.statcounter.com/?referer=');">StatCounter</a> 에서 확인한 전세계의 브라우저 점유율 추이를 보면 IE6가 이미 20%이하로 떨어진 걸 확인할 수 있습니다. 구글 입장에서 충분히 지원중단을 감행할 만한 상황인 거죠. 하지만 IE6 점유율이 50%가 넘는 한국의 상황에서는 네이버, 다음, 싸이월드 등 한국 대표 포털들이 합심해서 IE6 지원중단을 발표한다고 해도 쉽지 않을 것 같습니다. 고객센터만 난리나는 거죠.</p>
<p>ActiveX로 되지도 않은 보안 운운하지 말고, 쥐라기 시대의 공룡들이나 썼을 법한 IE6의 사용중지 캠페인이라도 정부차원에서 추진하시는게 대한민국의 웹보안에 더 좋을 듯 합니다. ActiveX로 전국민PC 지켜주시려고 애쓰시는 건 알겠는데, 그런 삽질도 몇년째 하셨으면 이제 깨달으실 때 안됐나요? <a href="http://www.engadget.com/2010/01/16/germany-advises-its-citizens-to-say-nein-to-internet-explorer/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.engadget.com/2010/01/16/germany-advises-its-citizens-to-say-nein-to-internet-explorer/?referer=');">독일정부의 인터넷보안부서도 IE 쓰지 말랬다자나요</a>. IE7/8은 봐줄테니 <strong>IE6사용중지특별법</strong>이라도 만들면 안될까요?</p>
]]></content:encoded>
			<wfw:commentRss>http://oddpoet.net/archives/11/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
