const zeroPad = num => "00000000".slice(String(num).length) + num;
const textToBinary = username => (
username.split('').map(char => {
console.log(char.charCodeAt(0))
return zeroPad(char.charCodeAt(0).toString(2))
}).join(' ')
);
const binaryToZeroWidth = binary => (
binary.split('').map((binaryNum) => {
const num = parseInt(binaryNum, 10);
if (num === 1) {
return 'u200b'; // zero-width space
} else if (num === 0) {
return 'u200c'; // zero-width non-joiner
}
return 'u200d'; // zero-width joiner
}).join('') // zero-width no-break space
);
const zeroWidthToBinary = string => (
string.split('').map((char) => { // zero-width no-break space
if (char === 'u200b') { // zero-width space
return '1';
} else if (char === 'u200c') { // zero-width non-joiner
return '0';
}
return ' '; // add single space
}).join('')
);
const binaryToText = string => (
string.split(' ').map(num =>
String.fromCharCode(parseInt(num, 2))).join('')
);
零宽空格(zero-width space, ZWSP)用于可能需要换行处。
Unicode: U+200B HTML: ​
零宽不连字 (zero-width non-joiner,ZWNJ)放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。
Unicode: U+200C HTML: ‌
零宽连字(zero-width joiner,ZWJ)是一个控制字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。
Unicode: U+200D HTML: ‍
左至右符号(Left-to-right mark,LRM)是一种控制字符,用于计算机的双向文稿排版中。
Unicode: U+200E HTML: ‎ ‎ 或‎
右至左符号(Right-to-left mark,RLM)是一种控制字符,用于计算机的双向文稿排版中。
Unicode: U+200F HTML: ‏ ‏ 或‏
字节顺序标记(byte-order mark,BOM)常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。
Unicode: U+FEFF