文本编码转换器核心JS实现

简介: 这是一个轻量级在线文本编码转换工具,支持UTF-8/Hex/Base64/Unicode/HTML实体/Punycode等十余种格式互转。基于原生TextEncoder/TextDecoder与URL API实现,无需依赖库,精准处理中文、Emoji及代理对,兼顾性能与兼容性。

工具网址和截图

在线工具网址:https://see-tool.com/encoding-converter

工具截图:
在这里插入图片描述

文本编码转换器功能核心实现解析

本文将深入探讨文本编码转换器(Text Encoding Converter)的核心 JavaScript 实现逻辑。该工具旨在实现普通文本与多种编码格式(如十六进制、二进制、Base64、Unicode 等)之间的相互转换。

1. 核心转换机制

整个工具的转换逻辑基于一个统一的入口函数 convert,它根据输入和输出格式,通过查找表(Lookup Table)调用相应的转换函数。

核心的字节处理依赖于浏览器原生的 TextEncoderTextDecoder API,这确保了对 UTF-8 的正确处理。

// 字符串转字节数组
const encoder = new TextEncoder();
const bytes = encoder.encode(text);

// 字节数组转字符串
const decoder = new TextDecoder('utf-8');
const text = decoder.decode(new Uint8Array(bytes));

2. 格式转换实现细节

2.1 进制转换 (Hex, Binary, Octal, Decimal)

对于二进制、八进制、十六进制等数字格式,核心思路是将文本转换为字节数组,然后利用 Number.prototype.toString(radix) 将每个字节转换为对应的进制字符串。

Hex(十六进制)为例:

textToHex: function(text, delimiter, prefix, uppercase) {
   
    const encoder = new TextEncoder();
    const bytes = encoder.encode(text);
    let hex = Array.from(bytes).map(b => {
   
        // 每个字节转16进制,并补齐2位
        let h = b.toString(16).padStart(2, '0');
        if (uppercase) h = h.toUpperCase();
        return prefix + h;
    });
    return hex.join(delimiter);
}

反向转换则是移除前缀和分隔符后,使用 parseInt(chunk, 16) 还原字节。

2.2 Base64 编码

JavaScript 原生的 btoaatob 函数只能处理 ASCII 字符。为了支持中文等 Unicode 字符,我们需要先对字符串进行编码处理。

文本转 Base64 的健壮实现:

textToBase64: function(text) {
   
    try {
   
        // 方法1: 使用 TextEncoder 获取字节,构造二进制字符串
        const encoder = new TextEncoder();
        const bytes = encoder.encode(text);
        let binary = '';
        bytes.forEach(byte => binary += String.fromCharCode(byte));
        return btoa(binary);
    } catch (e) {
   
        // 方法2: 降级方案,使用 encodeURIComponent 处理
        return btoa(unescape(encodeURIComponent(text)));
    }
}

Base64 转文本

base64ToText: function(base64) {
   
    const binary = atob(base64.trim());
    const bytes = new Uint8Array(binary.length);
    for (let i = 0; i < binary.length; i++) {
   
        bytes[i] = binary.charCodeAt(i);
    }
    const decoder = new TextDecoder('utf-8');
    return decoder.decode(bytes);
}

2.3 Unicode 转义与码点

处理 Unicode 转义(如 \u4E2D)时,关键在于正确处理代理对(Surrogate Pairs)。对于超出基本多文种平面(BMP, U+0000 到 U+FFFF)的字符(例如 Emoji),JavaScript 的字符串长度为 2。

我们使用 codePointAt(0) 来获取完整的码点值:

textToUnicodeEscape: function(text, delimiter, uppercase) {
   
    let result = [];
    for (let char of text) {
   
        let code = char.codePointAt(0);
        // 如果码点超过 0xFFFF,说明是代理对,JS 会将其视为两个字符
        if (code > 0xFFFF) {
   
            // 手动计算代理对(虽然 ES6 for-of 循环会自动正确迭代字符)
            const high = Math.floor((code - 0x10000) / 0x400) + 0xD800;
            const low = (code - 0x10000) % 0x400 + 0xDC00;
            // ... 转换为 \uXXXX\uXXXX 格式
            let h1 = high.toString(16).padStart(4, '0');
            let h2 = low.toString(16).padStart(4, '0');
            result.push('\\u' + h1);
            result.push('\\u' + h2);
        } else {
   
            // ... 普通字符转换为 \uXXXX
            let h = code.toString(16).padStart(4, '0');
            result.push('\\u' + h);
        }
    }
    return result.join(delimiter);
}

注意:使用 for...of 循环可以正确遍历字符串中的 Emoji 等宽字符,而普通的 for(let i=0;...) 则会把它们拆分成两个。

2.4 Punycode 转换

Punycode 是国际化域名(IDN)使用的编码。本项目采用了一个巧妙的利用浏览器原生 API 的方法,避免引入庞大的第三方库:

punycode: {
   
    encode: function(input) {
   
        try {
   
            // 利用 URL API 自动进行 Punycode 编码
            const url = new URL('http://' + input);
            return url.hostname.replace(/^xn--/, '');
        } catch (e) {
   
            // 降级处理...
        }
    },
    decode: function(input) {
   
        // 利用 URL API 自动解析
        const testUrl = 'http://' + input;
        const url = new URL(testUrl);
        return url.hostname;
    }
}

这是一个非常轻量且高效的实现方式。

2.5 HTML 实体

HTML 实体的转换相对直接,主要将字符转换为其对应的十进制或十六进制引用:

textToHtmlDecimal: function(text, delimiter) {
   
    let result = [];
    for (let char of text) {
   
        let code = char.codePointAt(0);
        result.push('&#' + code + ';');
    }
    return result.join(delimiter);
}

3. 字符详情分析

工具还提供了一个 getCharacterInfo 函数,用于分析单个字符的详细信息。它不仅返回字符本身,还计算其 Unicode 码点、UTF-8 字节序列等。

function getCharacterInfo(char) {
   
    const codePoint = char.codePointAt(0);
    const encoder = new TextEncoder();
    const utf8Bytes = encoder.encode(char);

    return {
   
        char: char,
        codePoint: codePoint, // 数字形式
        hex: codePoint.toString(16).toUpperCase(), // Hex 形式
        utf8: Array.from(utf8Bytes) // UTF-8 字节序列
              .map(b => b.toString(16).toUpperCase().padStart(2, '0'))
              .join(' ')
    };
}

总结

本项目的文本编码转换器通过充分利用 TextEncoder/TextDecoderURL API 以及 ES6+ 的字符串处理特性(如 codePointAtfor...of),以原生 JavaScript 实现了高效、轻量的多格式转换,无需依赖任何重型第三方库。

相关文章
|
16天前
|
人工智能 关系型数据库 Serverless
2 天,用函数计算 AgentRun 爆改一副赛博朋克眼镜
2 天将吃灰的 Meta 眼镜改造成“交警Copilot”:通过阿里云函数计算 AgentRun 实现端-管-云协同,利用 Prompt 驱动交通规则判断,结合 OCR 与数据库查询,打造可动态扩展的智能执法原型,展现 Agent 架构在真实场景中的灵活与高效。
302 44
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
模型训练篇|多阶段ToolRL打造更可靠的AI导购助手
芝麻租赁推出AI导购“租赁小不懂”,针对长周期、重决策租赁场景,首创“One-Model + Tool-Use”架构与两阶段强化学习,攻克需求难匹配、决策效率低、服务被动三大痛点,实现响应提速78%、推荐成功率提升14.93%,打造贴切、沉浸、信任的场景化租赁体验。(239字)
163 25
模型训练篇|多阶段ToolRL打造更可靠的AI导购助手
|
16天前
|
JavaScript 安全 前端开发
文本编码转换器在线工具分享
推荐一款基于Vue.js开发的在线文本编码转换器:支持12种格式互转(Base64、Unicode、UTF-8 Hex、HTML实体等),实时双向转换、自定义分隔符/前缀,纯前端运行,数据不上传,无广告,安全高效。
99 8
文本编码转换器在线工具分享
|
1月前
|
人工智能 安全 调度
AI工程vs传统工程 —「道法术」中的变与不变
本文从“道、法、术”三个层面对比AI工程与传统软件工程的异同,指出AI工程并非推倒重来,而是在传统工程坚实基础上,为应对大模型带来的不确定性(如概率性输出、幻觉、高延迟等)所进行的架构升级:在“道”上,从追求绝对正确转向管理概率预期;在“法”上,延续分层解耦、高可用等原则,但建模重心转向上下文工程与不确定性边界控制;在“术”上,融合传统工程基本功与AI新工具(如Context Engineering、轨迹可视化、多维评估体系),最终以确定性架构驾驭不确定性智能,实现可靠价值交付。
370 41
AI工程vs传统工程 —「道法术」中的变与不变
|
30天前
|
人工智能 运维 前端开发
阿里云百炼高代码应用全新升级
阿里云百炼高代码应用全新升级,支持界面化代码提交、一键模板创建及Pipeline流水线部署,全面兼容FC与网关多Region生产环境。开放构建日志与可观测能力,新增高中低代码Demo与AgentIdentity最佳实践,支持前端聊天体验与调试。
394 52
|
存储 缓存 NoSQL
阿里云 Tair KVCache 仿真分析:高精度的计算和缓存模拟设计与实现
阿里云 Tair 推出 KVCache-HiSim,首个高保真 LLM 推理仿真工具。在 CPU 上实现<5%误差的性能预测,成本仅为真实集群的1/39万,支持多级缓存建模与 SLO 约束下的配置优化,助力大模型高效部署。
|
16天前
|
人工智能 自然语言处理 前端开发
24小时15.3K安装量稳坐王座!老金愿称之为元Skill!
find-skills是AI Agent的“技能搜索指南”,装上后可自然语言指令(如“搜个数据分析skill”)自动查找、安装skills.sh生态技能。上线4天安装超5.2万次,遥遥领先。原版存在触发不稳定、Windows不兼容两大坑,老金已修复并开源Windows兼容版。
|
1月前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
425 46
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
1月前
|
SQL 人工智能 分布式计算
从工单、文档到结构化知识库:一套可复用的 Agent 知识采集方案
我们构建了一套“自动提取 → 智能泛化 → 增量更新 → 向量化同步”的全链路自动化 pipeline,将 Agent 知识库建设中的收集、提质与维护难题转化为简单易用的 Python 工具,让知识高效、持续、低门槛地赋能智能体。
366 36
|
1月前
|
存储 数据采集 弹性计算
面向多租户云的 IO 智能诊断:从异常发现到分钟级定位
当 iowait 暴涨、IO 延迟飙升时,你是否还在手忙脚乱翻日志?阿里云 IO 一键诊断基于动态阈值模型与智能采集机制,实现异常秒级感知、现场自动抓取、根因结构化输出,让每一次 IO 波动都有据可查,真正实现从“被动响应”到“主动洞察”的跃迁。
311 61