在前不久开发的一个实时语音对话项目中,后端同事要求将音频流转化为latin-1格式来发送请求,从而降低每次请求所消耗的流量。
我对于latin-1格式知之甚少,甚至在以前的开发中从来没有使用过。在网上查了很久也没有找到在前端进行laitin-1编码转换的资料,开发一度陷入了瓶颈。
此时我换了一种思路去解决这个问题,先不考虑JS,而是从latin-1本身入手,看看其他语言进行latin-1编码转换与JS是否有共通之处。
latin-1的编码范围是0-255,且latin-1是向下兼容ASCII的,而ASCII的编码范围是0-127,换言之,latin-1和ASCII在0-127之间的转换是一致的。而在JS中是存在直接进行ASCII转换的方法的,就是fromCharCode和charCodeAt。而以前使用这个方法一直都只进行127以内的转换,那么如果使用该方法进行128-255的字符编码会是什么结果呢,如果该方法仍然能正常使用的话,那么大胆猜想一下,转换得到的字符会不会就是进行latin-1编码转换得到的字符。
接下来的实验果然证明了我的猜想,fromCharCode方法能够对127-255之内的数进行编码转换,而得到的字符经过验证果然是latin-1编码字符。
String.fromCharCode(210);
// "Ò"
String.fromCharCode(97);
// "a"