zoukankan      html  css  js  c++  java
  • javascript 中字符串转化utf8字节数组, 然后在将字节数组转化十六进制字符串

    字节流,字符流,编码的解释

    https://www.zhihu.com/question/39262026

    http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

    1. Buffer 是用来处理流操作的

    2. 字符串转化utf8字节数组, 然后在将字节数组转化十六进制字符串

    /** 将字符串转化为utf-8字节 */
    function ToUTF8(str) {
        var result = new Array();
        var k = 0;
        for (var i = 0; i < str.length; i++) {
            var j = encodeURI(str[i]);
            if (j.length == 1) {
                // 未转换的字符
                result[k++] = j.charCodeAt(0);
            } else {
                // 转换成%XX形式的字符
                var bytes = j.split("%");
                for (var l = 1; l < bytes.length; l++) {
                    result[k++] = parseInt("0x" + bytes[l]);
                }
            }
        }
        return result;
    }
    
    /** 将 byte 字节转化成十六进制 */
    function Bytes2Str(arrBytes) {
        var str = ""
        for (var i = 0; i < arrBytes.length; i++) {
            var tmp;
            var num = arrBytes[i];
            if (num < 0) {
                //此处填坑,当byte因为符合位导致数值为负时候,需要对数据进行处理
                tmp = (255 + num + 1).toString(16);
            } else {
                tmp = num.toString(16);
            }
            if (tmp.length == 1) {
                tmp = "0" + tmp;
            }
            if (i > 0) {
                str += " " + tmp;
            } else {
                str += tmp;
            }
        }
        return str;
    }
    
    /** 将十六进制字符串转化为 byte 数组 */
    function Str2Bytes(name) {
        var hexA = new Array();
        name.forEach(item => {
            if (item === 'ff') {
                return hexA
            } else {
                hexA.push(parseInt(item, 16))
            }
        })
        return hexA
    }
    /** UTF8 转化为字符串 */
    function UTF8ToStr(arr) {
        let val = ''
        arr.forEach(item => {
            if (item < 127) {
                val += String.fromCharCode(item)
            } else {
                val += '%' + item.toString(16).toUpperCase()
            }
        })
        console.log(val)
        try {
            return decodeURI(val)
        } catch (err) {
            return val
        }
    }
  • 相关阅读:
    第九章:switch语句
    第八章:if-else语句
    第七章:运算符及运用
    第六章:名命规范
    事务
    jdbc
    Object
    容器
    Java exception
    Java OO1
  • 原文地址:https://www.cnblogs.com/han-guang-xue/p/14386666.html
Copyright © 2011-2022 走看看