zoukankan      html  css  js  c++  java
  • 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); // => 中
    
  • 相关阅读:
    Zookeeper安装部署
    dubbo/dubbox部署资料收集
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
    ios开发--清理缓存
    从零开始,让你的框架支持CocoaPods
    iOS 开发-- Runtime 1小时入门教程
    iOS 开发--github的demo
    linux 防火墙iptables简明教程
    利用BBRSACryptor实现iOS端的RSA加解密
    iOS开发--数组
  • 原文地址:https://www.cnblogs.com/ssaylo/p/12924071.html
Copyright © 2011-2022 走看看