• UTF8Encoding函数


    这是winter大大在前端阶级训练营第二周第二课给我们留的的作业,写一个UTF8Encoding函数

    怎么将一个Unicode编码的中文转为UTF8的字节码嘞?

    var str = '中';
    
    var code = encodeURI(str);
    
    console.log(code); // => %E4%B8%AD
    

    有没有发现得到了一个转义后的字符串,而且这个字符串中的内容和我之前在上面得到的字节码是一样的~~~。

    下面我们将%E4%B8%AD转为一个number数组。

    var codeList = code.split('%');
    
    codeList = codeList.map(item => parseInt(item,16));
    
    console.log(codeList); // => [228, 184, 173]
    

    如此简单,有木有~~~

    封装成一个函数

    function encodeUTF(text) {
        const code = encodeURIComponent(text);
        const bytes = [];
        for (let i = 0; i < code.length; i++) {
            const c = code.charAt(i);
            if (c === '%') {
                const hex = code.charAt(i + 1) + code.charAt(i + 2);
                const hexVal = parseInt(hex, 16);
                bytes.push(hexVal);
                i += 2;
            } else bytes.push(c.charCodeAt(0));
        }
        return bytes;
    }
    

    这个简便方法的原理是什么?

    这里就涉及到的URI中的querystring编码的问题了。因为按照规定,URI中的querystring必须按照UTF8的编码进行传输,而JavaScript是Unicode的,所以浏览器就给我们提供了一个方法,也就是encodeURI/encodeURIComponent方法。这个方法会讲非英文字符(这里考虑下,为什么是非英文字符?)先转为UTF8的字节码,然后前面加个%进行拼接,所以我们将汉字"中"转义下便得到了"%E4%B8%AD".
    好吧,原理就这些,没有其他的了。

    不过,这种方法还有个缺点,那就是只会转义非英文字符,所以当我们需要将英文字符也格式化为UTF8编码时,这个方法是达不到我们需求的,我们还需要额外的将英文字符也给转义下。

    那我想要解析回来应该怎么做哪?用decodeURI/decodeURIComponent就可以了。

    var codeList = [228, 184, 173];
    
    var code = codeList.map(item => '%'+item.toString(16)).join('');
    
    decodeURI(code); // => 中
    
  • 相关阅读:
    sublime插件FileHeader使用,自动的添加模板
    基于aspectj实现AOP操作的两种方式——xml配置
    AOP操作术语
    AOP原理
    maven的常用构建命令
    maven目录结构
    maven环境变量配置
    接口式编程
    mybatis编写流程(老版本的方式,新版本用接口式编程)
    当数据库中的字段与javabean中对应的属性名不同
  • 原文地址:https://www.cnblogs.com/ssaylo/p/12924071.html
Copyright © 2020-2023  润新知