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); // => 中
    
  • 相关阅读:
    js中location.href的用法
    entityframework单例模式泛型用法
    [C#]从URL中获取路径的最简单方法-new Uri(url).AbsolutePath
    等到花儿也谢了的await
    ASP.NET MVC下的异步Action的定义和执行原理
    实际案例:在现有代码中通过async/await实现并行
    ASP.NET MVC Controllers and Actions
    扩展HtmlHelper
    iOS开发网络篇—XML数据的解析
    IOS学习:常用第三方库(GDataXMLNode:xml解析库)
  • 原文地址:https://www.cnblogs.com/ssaylo/p/12924071.html
Copyright © 2011-2022 走看看