[네트워크 프로그래밍1]2진바이너리티 view를 이용하여 문자열 분석하기 및 자바 인코딩 방식 조사

류명운

·

2015. 4. 5. 15:46

반응형


2진 Binary Viewer를 사용하여 아스키코드 데이터의 2진 코드 확인하기.hwp


2진 Binary Viewer를 사용하여 아스키코드 데이터의 2진 코드 확인하기

- 1. Binary Viewer를 사용하여 데이터의 2진 코드 확인

- 2. ASCII Code Table

- 3. Java에서의 인코딩 방식

 

1. Binary Viewer를 사용하여 데이터의 2진 코드 확인



ⓐ : ⓑ데이터에 해당하는 2진 바이너리티 데이터를 16진수(hex)로 표현

ⓑ : ASCII 데이터(char 형)

ⓒ : ⓑ데이터를 2진 바이터리티 데이터로 변경한 값들의 표

① : Hexadecimal(16진법)으로 표현

② : Binary(2진법)로 표현

③ : Octal(8진법)로 표현

④ : Unsigned Integer(부호 없는 정수)로 표현

⑤ : Signed Integer(부호 붙임 정수)로 표현

⑥ : Unicode(유니코드)로 표현

⑦ : ASCII(아스키코드)로 표현

 

2. Ascii Table



* Dex(decimal):10진법, Hx(hexadecimal):16진법, Oct(octal):8진법, Char:문자

[출처 : http://www.asciitable.com/]


3. Java에서의 인코딩 방식

 

종류 -> EUC-KR, KSC5601, ISO-8859-1, UTF-8, ASCII

각 인코딩 방식에 따른 테스트 스크린샷

 


인코딩 방식에 따른 테스트. java 소스코드

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

 

public class EncodingUtil_js {

public static String[] charsets = new String[]{"EUC-KR", "KSC5601", "ISO-8859-1", "UTF-8", "ASCII"};

 

public static void printStringToByte(String str, String charset){

try {

byte string_bytes[] = str.getBytes(charset);

for(int i = 0 ; i < string_bytes.length; i++){

if(i % 8 == 0)System.out.println();

System.out.printf("%10s", string_bytes[i]);

}

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

//문자열과, 캐릭터셋을 받아 , 해당문자열을 캐릭터셋으로 디코딩

public static void printStringToBit(String str, String charset){

ArrayList<String> string_list = null;

try {

string_list = byteTobitString(str.getBytes(charset));

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

int string_list_size = string_list.size();

for(int i =0; i < string_list_size ; i ++){

if(i%8 == 0)System.out.println();

System.out.printf("%10s", string_list.get(i));

}

System.out.println();

}

//바이트 배열을 받아서 비트화시킨 문자열 리스트를 리턴함니다.

//아래의 byteTobitString에 종속적임니다.

public static ArrayList<String> byteTobitString(byte bytes[]){

ArrayList<String> result = new ArrayList<String>();

for(byte b : bytes)

result.add(byteTobitString(b));

return result;

}

 

//헠 헠 버그가 엄청나게 예상됨.

//바이트를 받아서 8자리 비트형태로 출력해줌니다.

//더쉽게 바꿀수있으면 조언부탁.

public static String byteTobitString(byte param_byte){

String result = Integer.toBinaryString(param_byte);

StringBuilder sb = new StringBuilder();

if(result.length() > 8){

result = result.substring(result.length()-8, result.length());

}else if(result.length() < 8){

int prepix_count_0 = 8-result.length();

for(; prepix_count_0 > 0; prepix_count_0--)

sb.append("0");

}

sb.append(result);

// System.out.println("byteTobitString_log[ 입력 byte ] : " + param_byte);

// System.out.println("byteTobitString_log[ 출력 String ] : " + sb.toString());

return sb.toString();

}

//문자열 받아서 그 문자열에대한 인코딩 디코딩 정보를 보고서처럼 출력해주는검니다.

public static void encodingTester(String str){

for(int i = 0 ; i < charsets.length ; i ++){

System.out.println("원래 글자 : " + str);

System.out.println(" 테스트 디코딩 캐릭터셋 : " + charsets[i] );

printStringToByte(str, charsets[i]);

printStringToBit(str, charsets[i]);

for(int j = 0 ; j < charsets.length ; j ++){

//if(i==j)continue;

try {

System.out.printf("Convert[%s] => [%s] : %s \n", charsets[i], charsets[j],

new String(str.getBytes(charsets[i]), charsets[j]));

} catch (UnsupportedEncodingException e) {e.printStackTrace();}

}

System.out.println();

System.out.println();

}

}

public static void main(String[] args) {

encodingTester("카루");

}

}


반응형