老站迁移编码
接手一个 2005 年用 GB2312 编码的政府信息公开网站,数据库里所有中文都是乱码。运维说原开发已离职,只剩一个 SQL 备份。用本工具把 GB2312 转成 UTF-8,先批量转 50 条测试标题,确认正文段落和附件名不乱码后,再全量转换 1.2 万条记录。转换后页面正常显示,浏览器不再弹出“编码”菜单。
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 个异常帖,逐一手工补回。
财务把台湾供应商发来的 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+ 编码,但部分小众编码需会员 | 支持编码种类取决于编辑器插件,但配置复杂 |
| 操作步骤 | 粘贴 → 选编码 → 转换 → 复制结果 | 上传 → 等待 → 选编码 → 下载 → 手动替换 | 打开文件 → 另存为 → 选编码 → 确认 → 关闭 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 你好世界(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/GB2312GBK 与 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-8GB2312 仅收录 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)进行编码转换;二进制文件用专用工具处理二进制文件不含字符编码信息,强制按文本编码转换会破坏文件结构,导致无法打开。
Unicode码点 = 编码规则(字节序列, 字符集)
字节序列原始字节流,如 0xC4 0xE3字符集源编码,如 GBK、UTF-8、Big5Unicode码点通用字符标识,如 U+4F60GBK 字节 0xC4 0xE3 对应 Unicode 码点 U+4F60(汉字'你')。转换时工具先查 GBK 映射表得到码点,再按 UTF-8 规则编码为 0xE4 0xBD 0xA0。
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";
?>最常见的原因是原文本本身就不是GBK,或者夹杂了其他编码的字符(比如某些符号是Big5的)。本工具是按你选择的源编码去解码的,如果源编码选错,那些不符合该编码规则的字节就会被替换成�。建议先用记事本或文本编辑器确认原文件的真实编码,或者把文本分段测试:先转一小段,看乱码是否集中在某几个字上,如果是,那几句可能是不同编码混进来的。
本工具目前仅支持单段文本的在线转换,不支持上传文件或批量处理。如果需要一次转换多个文件,可以先用其他工具(如Notepad++、VS Code的编码转换功能)批量处理,或者通过命令行(如iconv命令)在本地完成。单段文本的转换适合日常零散需求,比如修复一段乱码、调整网页源码编码等。
因为GB2312编码只覆盖简体中文字符和常用符号,不包含繁体字、生僻字或特殊符号。当UTF-8文本中含有繁体字(如「體」「國」)时,GB2312没有对应的码位,转换时就会用问号或�代替。如果文本中繁体字较多,建议选择GBK(它是GB2312的扩展,覆盖了繁体字)或Big5(专门针对繁体中文)。本工具支持GBK,可以避免这个问题。
会,这取决于目标系统的编码设置。本工具只负责把文本从源编码转换成目标编码的字节序列,并以文本形式展示。当你复制粘贴时,浏览器或编辑器会按自己的默认编码重新解释这些字节。比如转成UTF-8后复制到默认GBK的记事本,可能又乱码。建议粘贴后立即保存为UTF-8文件,或使用支持编码选择的编辑器(如VS Code、Sublime)进行粘贴。数据库导入同理,需确保表字段编码与转换结果一致。
会的,因为本工具是后端(BE)实现,你输入的文本会通过HTTP请求发送到服务器进行处理,处理完成后返回结果,服务器不会持久存储你的数据。但如果你的文本包含敏感信息(如密码、身份证号、商业机密),建议不要在在线工具中处理。对于敏感数据,推荐使用本地工具(如iconv命令行、Notepad++)离线完成转换。
如果不确定源编码,可以先尝试用本工具的「自动检测」功能(如果提供的话)进行识别。但自动检测并非100%准确,尤其是短文本或混合编码。更可靠的方法是:查看文件来源——繁体中文网站或台湾/香港的系统通常是Big5,简体中文网站一般是GBK/GB2312或UTF-8;或者用十六进制查看器打开文件,检查文件头(如EF BB BF是UTF-8 BOM)。如果实在无法确定,可以分别用GBK和Big5各转一次,比较结果哪个看起来正常。
这是浏览器默认编码设置问题。本工具返回的文本在页面上展示时,浏览器可能按自己的编码猜测来渲染,导致乱码。但当你复制并粘贴到记事本时,记事本会按文本本身的字节序列解释(通常是ANSI或UTF-8无BOM)。解决方法:在浏览器中,手动设置页面编码为转换后的目标编码(通常在「查看」→「编码」菜单中);或者把转换结果保存为文件,用文本编辑器指定编码打开。本工具结果区建议添加「复制结果」按钮,并提示用户粘贴时注意编码。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。