처리해야 할 공백 문자가 있다면, 꼭 고려해야 할 ‘ZERO WIDTH SPACE’

Code 값 32는 가장 흔히 볼 수 볼 수 있는 공백문자. 160도 공백문자인데, nbsp(Non-breaking Space) 문자라고 한다. 여기에 하나더 Code 값 8203이 있는데 이 값 역시 공백문자이다. 그런데 공백을 차지 하지 않는 공백문자, ‘ZERO WIDTH SPACE’라고 한단다. 보이지 않는 공백문자, 다른 말로 공백이 아닌 공백 문자이다. 참고로 유니코드 문자셋이다.

아래의 코드는 Javascript에서 Space 문자를 제거하는 코드이다.

let address = '공백 문자를 포함하는 문장';
let arrAddress = [];
for (let i = 0; i < address.length; i++) {
    let charCode = address.charCodeAt(i);
    if (charCode === 8203 /* Unicode Character 'ZERO WIDTH SPACE' */ || 
        charCode === 160 /* nbsp(non-breaking space) */ || 
        charCode === 32 /* Space */) {
        // skips all space chars
    } else {
        arrAddress.push(address[i]);
    }
}
address = arrAddress.join("");

이 글에서 언급하는 Space 문자로 3개 언급했는데.. 또 있다면 코드에 반영해야 할 것이다. 참고로 Javascript에서 문자열의 실행중 변경은 배열을 사용해야 한다. 즉, Java의 StringBuilder의 용도와 동일하다.

웹에서 JavaScript만으로 데이터 압축하여 파일로 저장하기

몇 일전에 웹에서 자바스크립트만으로 압축 파일의 압축을 해제하는 내용을 정리했습니다. 해당 글은 아래와 같습니다.

Javascript 기반의 압축 라이브러리, jszip

이제는 다시 웹에서 사용자가 만든 어떤 데이터를 하나의 압축 파일로 만들 필요가 있어, 앞서 살펴본 압축 라이브러리를 이용해 바이너리 데이터와 텍스트 데이터를 각각 file.bin과 file.txt라는 파일명으로 하여 하나의 a.zip 파일로 압축한 후 사용자의 PC에 다운로드 하는 코드를 정리합니다.

먼저 압축하고자 하는 바이너리 데이터를 아래의 코드처럼 준비합니다.

let buffer = new ArrayBuffer(8);
let dataview = new DataView(buffer);

dataview.setInt32(0, 9438);
dataview.setFloat32(4, 3224.3224);

위의 데이터는 file.bin이라는 파일명으로 압축파일에 존재하도록 아래처럼 코드를 추가합니다.

let zip = new JSZip();
zip.file("file.bin", buffer);

앞서 언급했듯, 바이너리 뿐만 아니라 텍스트 파일도 압축 파일에 추가해 봅니다. 아래처럼요.

zip.file("file.txt", 'Hello한글Hi!');

이제 이렇게 압축된 내용을 a.zip 파일로 저장하는 코드는 다음과 같습니다.

let zipFileName = 'a.zip';
zip.generateAsync({ type: "blob" }).then(
    function (blob) {
        if (isIE()) {
            saveToFile_IE(zipFileName, blob);
        } else {
            saveToFile_Chrome(zipFileName, blob);
        }
    }
);

못보던 isIE와 saveToFile_IE, saveToFile_Chrome 함수가 보입니다. 이 놈들은 아래의 글을 참고하시면 파악할 수 있답니다.

웹에서 Javascript 만으로 텍스트 파일 생성