南方都市报
UTF-8、GBK和Unicode并不是同一个概念。Unicode为字符分配统一编号,UTF-8是保存这些编号的一种变长编码,GBK和GB18030则是另一套中文字符编码方式。程序写入和读取时必须使用相互匹配的编码,否则字节🎊会被错误拆解。
例如,一段中文先被转换成 UTF-8 字▶️节,再被程序误当成 GBK 字节读取,原本属于一个汉字的多个字节可能被拆成两个或更多字符。程序仍然能够显示这些字符,于是用户🔥看到的不是方框,而是一串貌似“有字”的乱码。
数据库乱码排查需要把“存储前、写入时、存储后、读取时”分开检查,不能只修改页面显示设⭐置。数据一旦在写入数据库前就被破坏,单独调整前端编码无法恢复原文。
网页乱码恢复应当先保留原始页面或原始文件,避免在已经乱码的文本上继续保存。重复打开、复制、粘贴和另存为,可能让错误结果覆盖原始字节,降低后续恢复成功的机会。
当原始字节仍然存在时,编码恢复有机会还原真实文本;当原文已经被问号替换或被多次覆盖时,最多只能根据上下文提出候选结果,不能把推测当作确定答案。
这串字符是否来自网页、文件、数据库、聊天记录或接口响应,会直接影响恢复方式。只有字符画面而没有原始文件时,通常只能分析编码特征,不能仅凭外观确定原始语句。
表情符号的异常更容易暴露编码问题。许多表情使用四字节 UTF-8 编码,如果旧📢程序只按传统中文编码解析,表情可能变成多个汉字或不可识别符号。乱码中出现类似“馃”的字样,并不能说明原文一定含有某个汉字,它可能只是错误解析后的结果。
实际排查时,先记录这串字符出现的页面、软件、文件格式、生成时间和上下文,再获取未经过复制粘贴的原始版本。若原始来源来自网页、CSV、数据库或接口,分别检🎉查实际编码、读取编码和转码次数,通常比搜索相似词语更有效。