当前位置: 首页 > news >正文

建设电影网站选服务器怎么选贵州安顺做公司网站

建设电影网站选服务器怎么选,贵州安顺做公司网站,网站建设j基本步骤,wordpress多站点开启🌐 小程序/UniApp 中处理 GBK 编码:iconv-lite Buffer 实用指南适用场景:设备通信、蓝牙传输、旧系统对接、十六进制转中文等涉及 GB2312/GBK 编码 的中文乱码问题。🧩 一、为什么需要这个工具? 在小程序或 UniApp 开…

🌐 小程序/UniApp 中处理 GBK 编码:iconv-lite + Buffer 实用指南

适用场景:设备通信、蓝牙传输、旧系统对接、十六进制转中文等涉及 GB2312/GBK 编码 的中文乱码问题。


🧩 一、为什么需要这个工具?

在小程序或 UniApp 开发中,常遇到以下问题:

  • 蓝牙设备返回的中文是 GBK 编码的字节数组;
  • 后台接口返回十六进制字符串,需转为中文;
  • TextDecoder 不支持 gbk(低版本基础库);
  • 直接 toString() 出现乱码 ❌。

✅ 解决方案:使用 iconv-lite + Buffer 实现 GBK ↔ UTF-8 安全互转。


✅ 二、核心依赖

npm install iconv-lite buffer

⚠️ 注意:小程序需在 app.json 中配置 “usingComponents”: false 或确保兼容性。

🔧 三、核心代码:GBKDecoder 工具类

import * as iconv from 'iconv-lite';
import { Buffer } from 'buffer';// 预加载编码(提升性能)
iconv.encodingExists('gbk');export class GBKDecoder {/*** 统一转换为 Buffer*/private static toBuffer(data: any): Buffer {if (!data) return Buffer.alloc(0);if (Buffer.isBuffer(data)) return data;if (data instanceof Uint8Array) return Buffer.from(data);if (Array.isArray(data)) return Buffer.from(data);if (typeof data === 'object' && Array.isArray(data.data)) return Buffer.from(data.data);return Buffer.from(String(data));}/*** 解码 GBK 数据为字符串*/static decode(data: Buffer | Uint8Array | number[] | any): string {if (typeof data === 'string') return data;if (!data) return '';try {const buffer = this.toBuffer(data);if (buffer.length === 0) return '';return iconv.decode(buffer, 'gbk').toString();} catch (error) {console.warn('[GBKDecoder.decode] 解码失败:', error);return String(data);}}/*** 编码字符串为 GBK Buffer*/static encode(str: string): Buffer {if (typeof str !== 'string') str = String(str);try {return iconv.encode(str, 'gbk');} catch (error) {console.warn('[GBKDecoder.encode] 编码失败:', error);return Buffer.from(str, 'utf8');}}/*** 批量解码对象中的字段*/static decodeFields<T extends Record<string, any>>(obj: T,gbkFields: (keyof T)[]): T {const result = { ...obj };for (const field of gbkFields) {const value = result[field];if (value !== undefined && value !== null) {result[field] = this.decode(value);}}return result;}/*** 检测是否可能是 GBK 编码(含中文)*/static isLikelyGBK(data: any): boolean {try {const buffer = this.toBuffer(data);if (buffer.length === 0) return false;const decoded = iconv.decode(buffer, 'gbk');return /[\u4e00-\u9fa5]/.test(decoded);} catch {return false;}}/*** 智能解码:优先 UTF-8,失败尝试 GBK*/static smartDecode(data: any): string {if (typeof data === 'string') return data;try {const buffer = this.toBuffer(data);if (buffer.length === 0) return '';// 尝试 UTF-8const utf8 = buffer.toString('utf8');if (utf8 === decodeURIComponent(escape(utf8))) {return utf8; // 有效 UTF-8}// 尝试 GBKreturn this.decode(buffer);} catch {return String(data);}}
}

🚀 四、使用示例

1:十六进制字符串 → 中文

function hexToBytes(hex) {const bytes = []for (let i = 0; i < hex.length; i += 2) {bytes.push(parseInt(hex.substr(i, 2), 16))}return bytes
}const hex = 'C4E3BAC3'; // "你好"
const hex1 = 'BCA6CDC8' // "鸡腿"
const bytes = hexToBytes(hex);
const text = GBKDecoder.decode(bytes);
console.log(text); // 输出:你好

2:中文 → 十六进制


const buffer = GBKDecoder.encode('你好');
const hex = Array.from(buffer, b => b.toString(16).padStart(2, '0')).join('').toUpperCase();
console.log(hex); // 输出:C4E3BAC3

3:批量解码 API 返回字段

  // "你" 的 GBK 是 [196, 227] → C4 E3// "好" 的 GBK 是 [186, 195] → BA C3const res = { name: [196, 227], desc: [186, 195] }const decoded = GBKDecoder.decodeFields(res, ['name', 'desc'])console.log(decoded, 3333) // { name: '你', desc: '好' }

4:智能解码(自动判断编码)

const data = new Uint8Array([196, 227, 186, 195])
const text = GBKDecoder.smartDecode(data);
console.log(text); // 输出:你好
http://www.dtcms.com/a/553590.html

相关文章:

  • 小城镇建设的网站中的主要观点个人域名备案查询
  • 互联网站管理工作细则网页qq属于
  • 润商网站建设服务河北住房和城乡建设厅网站驱动
  • 【轨物方案】智控未来,运维无忧——操作机构机械特性物联网软硬件一站式解决方案
  • 【安科瑞解读】母线槽监控:从“盲管”到“智能运维”的跨越式升级
  • 使用goland ide工具,本地调试运行main.go报错,无法断点调试
  • 仓颉语言三方库开发与使用指南(通用仓颉篇)
  • 【互联网产品助理的成长之路(1)】需求设计的大致流程及思考
  • JAVASE速通复习(二)
  • 广州做网站好的公司胶州网站建设 网络推广
  • git提交 关键字介绍 约定式提交
  • vue2 vue3 修改elementUI和elementPlus主题颜色
  • 易班网站建设基础贵阳设计网站建设
  • 【Linux】Linux 权限
  • 食品电子商务网站建设规划书一般网站的宽度是多少
  • Python爬虫实战:美元-人民币汇率历史数据获取与趋势分析
  • android studio创建使用开发打包教程
  • 基于Springboot的影视评论网站的设计与实现58py6238(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
  • 57套思维导图PPT模板合集 培训/头脑风暴/工作规划 可编辑PPTX
  • 项目源码安全审查—密钥硬编码问题
  • 内蒙古城乡住房建设厅网站网站建设及发布的流程
  • Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用
  • Hutool 全面实战指南:让 Java 开发更“甜”
  • LangChain进阶学习
  • 网站广告图怎么做网站开发的工作制度
  • 关于Delphi的一次吵架
  • 全连接层的第二层是怎么减少神经节点数
  • Rust开发之泛型约束与where子句的应用
  • 什么是CVE?如何通过SAST/静态分析工具Perforce QAC 和 Klocwork应对CVE?
  • 通过 Nix 管理 C 和 C++ 依赖项