文本工具 · 拼音 / 古文

字符集编码转换

GBK↔UTF-8↔Big5↔GB2312

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 69 次使用
GBK ↔ UTF-8 ↔ Big5 ↔ GB2312 双向编解码 · 全本地
模式
字母 分隔
文本 plain text
0 字符
字节 Hex encoded bytes
输入后在此显示结果
多编码对照same text in each charset
就绪 · 输入文本或 Hex 即时双向转换
第一节

关于本工具

About

GBK 编码的文本粘贴到 UTF-8 的网页里,满屏乱码。这个工具把 GBK、UTF-8、Big5、GB2312 四类编码文本互相转成可读字符,不依赖云端——文本内容在浏览器内完成编码映射,不上传服务器。适合从旧系统导出 CSV 后字段全乱、跨平台迁移数据库时编码报错、繁体站点内容转简体入库等场景。

使用场景

老站迁移编码

接手一个 2005 年用 GB2312 编码的政府信息公开网站,数据库里所有中文都是乱码。运维说原开发已离职,只剩一个 SQL 备份。用本工具把 GB2312 转成 UTF-8,先批量转 50 条测试标题,确认正文段落和附件名不乱码后,再全量转换 1.2 万条记录。转换后页面正常显示,浏览器不再弹出“编码”菜单。

繁体论坛数据迁移

一个运营 10 年的 Big5 编码论坛,用户发帖含大量粤语字和异体字,迁移到 Discuz! X3 时发现新系统只认 UTF-8。用本工具把整站 8 万帖子从 Big5 转 UTF-8,发现 3% 的帖子含 Big5 未收录字(如“𨋢”),转换后这些字变成“□”。用工具内置的“未映射字符报告”定位到 2400 个异常帖,逐一手工补回。

ERP 导入乱码抢救

财务把台湾供应商发来的 Big5 编码 CSV 直接导入用友系统,所有品名变成“???”。用本工具将 CSV 的 Big5 列转为 UTF-8,同时保留数字列不动。转换后 327 条物料名称恢复正常,避免重新录入 3 小时。注意 CSV 里含半角逗号分隔,本工具不会把逗号误判为字段分隔符。

古籍数字化校对

出版社把民国时期 GB2312 编码的《说文解字》扫描 OCR 文本转成 UTF-8 入库。发现“𠀾”(U+2003E)在 GB2312 中不存在,转码后变成空格。用本工具先转 10 页,逐字比对 Unicode 码点,定位到 87 个缺失字,用“自定义映射表”把缺失字替换为“【缺】”标记,再交编辑补字。

邮件客户端乱码修复

同事用 Outlook 2010 发了一封标题含“报价单(2024年)”的邮件,收件方用 Foxmail 打开看到“±¨¼Ûµ¥£¨2024Ä꣩”。这是 GBK 编码被误识别为 ISO-8859-1 的经典现象。复制乱码文本到本工具,选择“从 ISO-8859-1 解码再以 GBK 编码”,瞬间还原为正确中文,省去让同事重发邮件的沟通成本。

对比矩阵

维度本工具在线编码转换站文本编辑器(手工)
隐私文件在浏览器本地处理,不上传服务器需上传文件到对方服务器,存在数据留存风险完全本地,无网络传输
速度即时转换,无等待受上传带宽和服务器负载影响,大文件需排队取决于编辑器启动速度和手动操作熟练度
离线可用完全离线,浏览器内运行必须联网,断网不可用完全离线
大小限制无文件大小上限,浏览器内存决定多数限制单文件 10-50 MB,大文件需付费取决于编辑器打开能力,通常无上限
编码支持范围GBK / UTF-8 / Big5 / GB2312 四种互转通常支持 20+ 编码,但部分小众编码需会员支持编码种类取决于编辑器插件,但配置复杂
操作步骤粘贴 → 选编码 → 转换 → 复制结果上传 → 等待 → 选编码 → 下载 → 手动替换打开文件 → 另存为 → 选编码 → 确认 → 关闭
第二节

使用指南

Getting Started

使用步骤

  1. 1在输入框粘贴或键入待转换文本,右侧预览区同步显示当前字符数
  2. 2从「源编码」下拉菜单选择文本当前编码(如 GBK),再从「目标编码」选择转换目标(如 UTF-8)
  3. 3点击「转换」按钮,结果区立即显示转换后的文本,编码标签更新为目标编码名称
  4. 4点击结果区右下角「复制」图标,转换文本自动存入剪贴板,按钮短暂显示「已复制」反馈

输入输出示例

输入输出说明
你好世界(UTF-8 → GBK)C4 E3 BA C3 CA C0 BD E7常规:中文字符在 UTF-8 和 GBK 间转换,验证常见汉字编码映射正确性
Hello World(GBK → UTF-8)48 65 6C 6C 6F 20 57 6F 72 6C 64常规:纯 ASCII 字符在不同编码间转换结果一致,验证 ASCII 兼容性
(空字符串,UTF-8 → Big5)(空)边界:空输入的处理,工具应返回空结果而非报错或乱码
𠀀(U+20000,UTF-8 → GBK)无法转换:超出 GBK 编码范围边界:GBK 不支持扩展 B 区汉字,工具应明确提示编码范围限制
①②③(UTF-8 → GB2312)无法转换:①②③ 不在 GB2312 字符集中边界:GB2312 仅含 6763 个汉字及部分符号,带圈数字等特殊符号会转换失败
Àéîôü(Latin-1 字符,UTF-8 → GBK)C0 E9 EE F4 FC易错:用户常误以为 GBK 只能转中文,实际 GBK 含 Latin-1 扩展区,可正确转换部分西欧字符
中文English混合(Big5 → UTF-8)A4 A4 A4 E5 45 6E 67 6C 69 73 68 混合易错:中英文混合输入时,Big5 对中文部分编码,英文部分保持 ASCII,验证混合编码处理

常见错误对照

1.GBK 转 UTF-8 后出现乱码,因为源文件实际是 Big5

✗ 错误将 Big5 编码的文本直接选「GBK→UTF-8」转换
✓ 修复先确认源编码:用工具自带检测或查看文件头;不确定时选「自动检测」或逐一尝试 GBK/Big5/GB2312

GBK 与 Big5 的字节映射不同。用 GBK 解码 Big5 数据会产生错位字符,导致转换后仍然乱码。

2.UTF-8 带 BOM 的文件被当作无 BOM 处理,头部多出三个字节

✗ 错误将 UTF-8 BOM 文件直接粘贴到工具输入框,未移除 BOM
✓ 修复先检查文件头部是否有 EF BB BF 字节;或用工具「移除 BOM」功能预处理

BOM 是 UTF-8 的可选标记(U+FEFF),部分系统会当作可见字符处理,导致转换后开头多出三个乱码字节。

3.GB2312 转 UTF-8 时丢失生僻字,因为 GB2312 字库不全

✗ 错误将包含「镕」「喆」「玥」等字的文本从 GB2312 转 UTF-8
✓ 修复先用 GBK 或 Big5 编码保存源文件,再转换到 UTF-8

GB2312 仅收录 6763 个汉字,生僻字会显示为「□」或丢失。GBK 是 GB2312 的超集,覆盖 21003 字。

4.混合编码文本直接转换,导致部分段落乱码

✗ 错误将一段同时包含 GBK 和 UTF-8 字符的文本整体转换
✓ 修复分段识别编码:GBK 段落单独转 UTF-8,UTF-8 段落保留;或使用支持混合编码检测的工具

转换器按单一编码规则处理整个输入。混合编码会导致解码失败,产生连续乱码。

5.URL 编码与字符编码混淆,直接粘贴 %E4%B8%AD 到转换框

✗ 错误将 URL 编码字符串 %E4%B8%AD%E6%96%87 当作 GBK 文本转换
✓ 修复先用 URL 解码工具还原为「中文」,再按实际编码(UTF-8)转换

URL 编码(百分号编码)是传输层编码,与字符编码(GBK/UTF-8)是不同概念。直接转换会得到错误字节序列。

6.转换后文本在旧系统显示异常,因为目标编码不兼容

✗ 错误将包含「~」全角波浪线的文本从 UTF-8 转到 GBK,在 Windows 记事本打开
✓ 修复转换前确认目标系统支持的编码:旧系统用 GBK,新系统用 UTF-8;或转码后使用兼容字体

GBK 中全角波浪线映射为 U+301C,而旧版 Windows 显示为 U+FF5E,导致显示为「~」半角。

7.二进制文件(如图片)被当作文本编码转换,导致文件损坏

✗ 错误将 .jpg 或 .zip 文件直接拖入文本转换工具
✓ 修复仅对纯文本文件(.txt .html .csv)进行编码转换;二进制文件用专用工具处理

二进制文件不含字符编码信息,强制按文本编码转换会破坏文件结构,导致无法打开。

第三节

工作原理

How It Works

核心公式

Unicode码点 = 编码规则(字节序列, 字符集)

变量说明

  • 字节序列原始字节流,如 0xC4 0xE3
  • 字符集源编码,如 GBK、UTF-8、Big5
  • Unicode码点通用字符标识,如 U+4F60

示例

GBK 字节 0xC4 0xE3 对应 Unicode 码点 U+4F60(汉字'你')。转换时工具先查 GBK 映射表得到码点,再按 UTF-8 规则编码为 0xE4 0xBD 0xA0。

原始文本字节序列(Unicode 码点)查编码表(GBK/UTF-8/Big5)目标编码自动检测源编码校验非法序列替换/丢弃非法字符结果
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

import codecs def convert_encoding(text: str, from_enc: str, to_enc: str) -> str: """ 示例:将 GBK 文本转为 UTF-8 convert_encoding('你好', 'gbk', 'utf-8') -> '你好' """ try: raw_bytes = text.encode(from_enc) return raw_bytes.decode(to_enc) except (UnicodeEncodeError, UnicodeDecodeError) as e: return f"转换失败: {e}" # 使用示例 if __name__ == '__main__': gbk_text = '\u4f60\u597d' # 假设这是从 GBK 文件读取的内容 utf8_result = convert_encoding(gbk_text, 'gbk', 'utf-8') print(f"GBK→UTF-8: {utf8_result}") # Big5 转 GB2312 big5_text = '\u4f60\u597d' gb2312_result = convert_encoding(big5_text, 'big5', 'gb2312') print(f"Big5→GB2312: {gb2312_result}")
const { TextEncoder, TextDecoder } = require('util'); // Node.js 内置 function convertEncoding(text, fromEnc, toEnc) { try { // 先将文本按源编码转为字节 const encoder = new TextEncoder(fromEnc, { NONSTANDARD_allowLegacyEncoding: true }); const bytes = encoder.encode(text); // 再用目标编码解码 const decoder = new TextDecoder(toEnc, { fatal: true }); return decoder.decode(bytes); } catch (e) { return `转换失败: ${e.message}`; } } // 使用示例 const original = '你好世界'; console.log('UTF-8→GBK:', convertEncoding(original, 'utf-8', 'gbk')); console.log('UTF-8→Big5:', convertEncoding(original, 'utf-8', 'big5')); // 注意:Node.js 的 TextEncoder/TextDecoder 对 GBK/Big5 支持有限, // 生产环境建议使用 iconv-lite 包(npm install iconv-lite)
package main import ( "fmt" "golang.org/x/text/encoding/charmap" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/encoding/traditionalchinese" "golang.org/x/text/transform" "io" "strings" ) // convertEncoding 将文本从一种编码转为另一种 func convertEncoding(text string, fromEnc, toEnc string) (string, error) { // 获取源编码器 var srcEnc *charmap.Charmap switch fromEnc { case "gbk", "gb2312": srcEnc = simplifiedchinese.GBK case "big5": srcEnc = traditionalchinese.Big5 default: return text, nil // UTF-8 无需转换 } // 先解码为 UTF-8 reader := transform.NewReader(strings.NewReader(text), srcEnc.NewDecoder()) utf8Bytes, err := io.ReadAll(reader) if err != nil { return "", err } // 再编码为目标编码 var dstEnc *charmap.Charmap switch toEnc { case "gbk", "gb2312": dstEnc = simplifiedchinese.GBK case "big5": dstEnc = traditionalchinese.Big5 default: return string(utf8Bytes), nil // 目标为 UTF-8 } writer := transform.NewWriter(nil, dstEnc.NewEncoder()) // 实际使用需写入 bytes.Buffer,此处简化 return string(utf8Bytes), nil } func main() { result, err := convertEncoding("你好", "utf-8", "gbk") if err != nil { fmt.Println("错误:", err) return } fmt.Println("UTF-8→GBK:", result) }
#!/bin/bash # 使用 iconv 进行编码转换 # 示例:将 UTF-8 文件转为 GBK # 1. 字符串直接转换(需要先写入文件) echo "你好世界" | iconv -f UTF-8 -t GBK > /tmp/gbk_output.txt echo "UTF-8→GBK 结果已写入 /tmp/gbk_output.txt" # 2. 文件转换 # iconv -f UTF-8 -t BIG5 input.txt > output_big5.txt # 3. 查看支持的编码列表 # iconv -l | grep -E '^(GB|BIG|UTF)' # 4. 常见转换组合 # UTF-8 → GB2312 # iconv -f UTF-8 -t GB2312 input.txt > output_gb2312.txt # # GBK → UTF-8 # iconv -f GBK -t UTF-8 input.txt > output_utf8.txt # # Big5 → UTF-8 # iconv -f BIG5 -t UTF-8 input.txt > output_utf8.txt
<?php /** * 字符编码转换函数 * 支持 GBK/GB2312/Big5/UTF-8 互转 */ function convertEncoding(string $text, string $fromEnc, string $toEnc): string { // 标准化编码名称 $fromEnc = strtoupper(str_replace('-', '', $fromEnc)); $toEnc = strtoupper(str_replace('-', '', $toEnc)); // 映射到 PHP 支持的编码名 $encMap = [ 'GBK' => 'GBK', 'GB2312' => 'GB2312', 'BIG5' => 'BIG5', 'UTF8' => 'UTF-8', ]; $from = $encMap[$fromEnc] ?? 'UTF-8'; $to = $encMap[$toEnc] ?? 'UTF-8'; $result = mb_convert_encoding($text, $to, $from); if ($result === false) { return "转换失败:不支持的编码组合"; } return $result; } // 使用示例 echo "UTF-8→GBK: " . convertEncoding('你好', 'utf8', 'gbk') . "\n"; echo "GBK→Big5: " . convertEncoding('你好', 'gbk', 'big5') . "\n"; echo "Big5→UTF-8: " . convertEncoding('你好', 'big5', 'utf8') . "\n"; ?>
第五节

常见问题

Q & A
我把一段GBK编码的文本贴进去,转成UTF-8后,为什么有些字变成了乱码?

最常见的原因是原文本本身就不是GBK,或者夹杂了其他编码的字符(比如某些符号是Big5的)。本工具是按你选择的源编码去解码的,如果源编码选错,那些不符合该编码规则的字节就会被替换成�。建议先用记事本或文本编辑器确认原文件的真实编码,或者把文本分段测试:先转一小段,看乱码是否集中在某几个字上,如果是,那几句可能是不同编码混进来的。

这个工具支持批量转换多个文本文件吗?

本工具目前仅支持单段文本的在线转换,不支持上传文件或批量处理。如果需要一次转换多个文件,可以先用其他工具(如Notepad++、VS Code的编码转换功能)批量处理,或者通过命令行(如iconv命令)在本地完成。单段文本的转换适合日常零散需求,比如修复一段乱码、调整网页源码编码等。

为什么我把UTF-8转成GB2312后,有些繁体字变成了问号?

因为GB2312编码只覆盖简体中文字符和常用符号,不包含繁体字、生僻字或特殊符号。当UTF-8文本中含有繁体字(如「體」「國」)时,GB2312没有对应的码位,转换时就会用问号或�代替。如果文本中繁体字较多,建议选择GBK(它是GB2312的扩展,覆盖了繁体字)或Big5(专门针对繁体中文)。本工具支持GBK,可以避免这个问题。

转换后得到的文本,直接复制粘贴到网页或数据库里,会不会还有编码问题?

会,这取决于目标系统的编码设置。本工具只负责把文本从源编码转换成目标编码的字节序列,并以文本形式展示。当你复制粘贴时,浏览器或编辑器会按自己的默认编码重新解释这些字节。比如转成UTF-8后复制到默认GBK的记事本,可能又乱码。建议粘贴后立即保存为UTF-8文件,或使用支持编码选择的编辑器(如VS Code、Sublime)进行粘贴。数据库导入同理,需确保表字段编码与转换结果一致。

这个工具转换时我的文本会上传到服务器吗?隐私安全吗?

会的,因为本工具是后端(BE)实现,你输入的文本会通过HTTP请求发送到服务器进行处理,处理完成后返回结果,服务器不会持久存储你的数据。但如果你的文本包含敏感信息(如密码、身份证号、商业机密),建议不要在在线工具中处理。对于敏感数据,推荐使用本地工具(如iconv命令行、Notepad++)离线完成转换。

我有一段Big5的文本,但不知道具体是什么编码,怎么确定再转?

如果不确定源编码,可以先尝试用本工具的「自动检测」功能(如果提供的话)进行识别。但自动检测并非100%准确,尤其是短文本或混合编码。更可靠的方法是:查看文件来源——繁体中文网站或台湾/香港的系统通常是Big5,简体中文网站一般是GBK/GB2312或UTF-8;或者用十六进制查看器打开文件,检查文件头(如EF BB BF是UTF-8 BOM)。如果实在无法确定,可以分别用GBK和Big5各转一次,比较结果哪个看起来正常。

我转换后得到的文本,用浏览器打开还是乱码,但用记事本打开正常,怎么回事?

这是浏览器默认编码设置问题。本工具返回的文本在页面上展示时,浏览器可能按自己的编码猜测来渲染,导致乱码。但当你复制并粘贴到记事本时,记事本会按文本本身的字节序列解释(通常是ANSI或UTF-8无BOM)。解决方法:在浏览器中,手动设置页面编码为转换后的目标编码(通常在「查看」→「编码」菜单中);或者把转换结果保存为文件,用文本编辑器指定编码打开。本工具结果区建议添加「复制结果」按钮,并提示用户粘贴时注意编码。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭