本文由 资源共享网 – ziyuan 发布,转载请注明出处,如有问题请联系我们![免费]js实现2到36进制的Unicode编码和字符之间的来回转换

收藏
/*
功能:十进制的 Unicode 编码转为字符串
用法:
const encodedText = "26469, 28304, 65306, 36164, 28304, 20849, 20139, 32593, 32, 32, 119, 119, 119, 46, 48, 56, 105, 56, 46, 99, 111, 109";
document.getElementById('footer-info').textContent = decodeFooter(encodedText);
document.getElementById('footer-info').innerHTML = decodeFooter(encodedText);
*/
function decodeFooter(encodedText) {
    const codeArray = encodedText.split(',').map(Number);
    return codeArray.map(code => String.fromCharCode(code)).join('');
}

/*
功能:转字符串转为十进制的 Unicode 编码
用法:
var str = "<a href='http://www.08i8.com'>资源共享网</a>";
console.log(stringToDecimalUnicode(str));
*/
function stringToDecimalUnicode(str) {
    return Array.from(str)
        .map(char => char.codePointAt(0))
        .join(', ');
}

/*
功能:转字符串转十六进制的 Unicode 编码
用法:
var str = "<a href='http://www.08i8.com'>资源共享网</a>";
console.log(stringToUnicode(str));
*/
function stringToUnicode(str) {
    return Array.from(str)
        .map(char => `${char.codePointAt(0).toString(16)},`)
        .join('');
}

/*
功能:把字符串转为2到36进制的Unicode编码
用法:
console.log(stringToUnicode('你好', 16)); // \\u4f60\\u597d
console.log(stringToUnicode('ABC', 2));   // 1000001 1000010 1000011
*/
function stringToUnicode(str, radix = 16) {
    let result = '';
    for (let i = 0; i < str.length; i++) {
        const codePoint = str.codePointAt(i);
        // 处理代理对(Surrogate Pair)的字符
        if (codePoint > 0xFFFF) i++;
        const encoded = codePoint.toString(radix);
        result += radix === 16 ? `\\u${encoded.padStart(4, '0')}` : encoded+",";
    }
    return result;
}


/*
功能:把为2到36进制的Unicode编码转为字符串
用法:
// 十六进制(带\u前缀)
console.log(unicodeToString('\\u4f60\\u597d')); // 输出:"你好"
// 二进制输入
console.log(unicodeToString('1001001 1001100 1001111', 2)); // 输出:"ILO"
// 八进制输入
console.log(unicodeToString('144 154 157', 8)); // 输出:"ILO"
// 自定义进制(如5进制)
console.log(unicodeToString('221 302 1100', 5)); // 输出:"ABC"
*/
function unicodeToString(encodedStr, radix = 16) {
    // 处理十六进制带\u前缀的情况
    const hexPattern = /\\u([a-f\d]{4,})/gi;
    const isHexFormat = hexPattern.test(encodedStr);
    
    // 分割编码单元(考虑空格/逗号分隔的情况)encodedStr.split(",").filter(Boolean)
    const codeUnits = isHexFormat 
        ? encodedStr.match(hexPattern).map(u => u.slice(2))
        : encodedStr.split(/[\s,]+/).filter(Boolean);

    return codeUnits.reduce((str, unit) => {
        try {
            const codePoint = parseInt(unit, radix);
            if (isNaN(codePoint)) throw new Error(`Invalid ${radix}-base code`);
            return str + String.fromCodePoint(codePoint);
        } catch (e) {
            console.warn(`Skipped invalid code unit: ${unit}`);
            return str;
        }
    }, '');
}


评论(0条)

请登录后评论
ziyuan

ziyuan Rank: 16

0

0

0

( 此人很懒并没有留下什么~~ )

首页

栏目

搜索

会员