■ 플래시 ■/Adobe ActionScript3.0

ByteArray를 사용한 문자열 인코딩

serpiko 2013. 11. 28. 14:05
function readMultiEncodingText(bytes:ByteArray):String
{
	//UTF-8 with BOM
	if(bytes[0] == 0xEF)if(bytes[1] == 0xBB)if(bytes[2] == 0xBF) return bytes.toString();
	
	//UTF-16 Big Endian
	if(bytes[0] == 0xFE)if(bytes[1] == 0xFF) return bytes.toString();
	
	//UTF-16 Little Endian
	if(bytes[0] == 0xFF)if(bytes[1] == 0xFE) return bytes.toString();
	
	//UTF-32 Big Endian
	if(bytes[0] == 0x0)if(bytes[1] == 0x0)if(bytes[2] == 0xFE)if(bytes[3] == 0xFF) return bytes.toString();
	
	//UTF-32 Little Endian
	if(bytes[0] == 0xFF)if(bytes[1] == 0xFE)if(bytes[2] == 0x0)if(bytes[3] == 0x0) return bytes.toString();
	
	//기타
	var ansiStr:String = bytes.readMultiByte(bytes.bytesAvailable, "ANSI");
	var unicodeStr:String = bytes.toString();
	
	if(ansiStr.length < unicodeStr.length) return ansiStr;
	
	return unicodeStr;
}

출처 : http://airdev.tistory.com/397  원강민님 블로그


 

사용법이 자세하게 나와있지 않아서 바이너리 형식의 데이터에 대한 사용법을 작성해 둔다.


일단 바이너리 데이터의 UTF지원을 추가해주고, 포인터를 0으로 초기화해준 뒤 쓰면 된는데


약간의 메서드와 속성만 적용해서 아래와 같이 쓰면 된다.

function sendToText($str):String{
	var ba:ByteArray = new ByteArray();
	ba.writeUTFBytes($str); //UTF문자열쓰기
	ba.position = 0; //byteArray 포인터를 0으로 이동
	var encoStr:String = readMultiEncodingText(ba);
	trace(encoStr);
	return encoStr;
}

sendToText("달변가보다 실천가");