변환 가능한 인코딩 찾기


어짜피 인코딩타입 찾는 것은 삽질인가. 모든 인코딩 변환 방식을 테스트해볼 수 있는것도 아니고,,조금이라도 편하고자 메소드 하나 만들어봤다.

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;
}
해설은 생략.

아래는 테스트 코드

@Test
public 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;
}

댓글

이 블로그의 인기 게시물

Session 대신 JWT를 사용하는 이유

VSCode에서의 VIM 단축키와 키보드 구매 가이드

우분투에서 테스트링크(testlink)와 맨티스(mantis)로 테스팅 서버 구성하기