변환 가능한 인코딩 찾기
어짜피 인코딩타입 찾는 것은 삽질인가. 모든 인코딩 변환 방식을 테스트해볼 수 있는것도 아니고,,조금이라도 편하고자 메소드 하나 만들어봤다.
public ArrayList<Map<String, String>> detectEncoding(String plainText) throws Exception {String[] encodingTypes = {"ISO-8859-1", "EUC-KR", "UTF-8"};ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();for (String fromEncType : encodingTypes) {for (String toEncType : encodingTypes) {String encStr = new String(plainText.getBytes(fromEncType), toEncType);if (plainText.equals(encStr)) {Map<String, String> enableType = new Hashtable<String, String>();enableType.put("fromEncType", fromEncType);enableType.put("toEncType", toEncType);list.add(enableType);}}}return list;}
해설은 생략.
아래는 테스트 코드
@Testpublic void detectEncodingTest() throws Exception {String plainText = "소사본동";ArrayList<Map<String, String>> list = encrypter.detectEncoding(plainText);for (Map<String, String> transTypes : list) {String encStr = new String(plainText.getBytes(transTypes.get("fromEncType")), transTypes.get("toEncType"));Assert.assertEquals(plainText, encStr);}}
보너스 . php 버전 - 인터넷에 돌아다니는 것을 약간 변형함
public function detectEncoding( $str ){$resultEncodingSet ="";$encodingSet = array("CP494","EUC-KR","ISO-8859-1","UTF-8");foreach ($encodingSet as $v) {$tmp = iconv($v, $v, $str);if (md5($tmp) == md5($str)) $resultEncodingSet = $resultEncodingSet." | ".$v;}return $resultEncodingSet;}
댓글
댓글 쓰기