中国网
因此,“中文有码”不能简单理解为“中文已经编码成某一种固定格式”。同一段中文可以使用多种编码方式表示,只有明确字符集、编码格式和数据边界,其他程序才能正确还原文字。
排查乱码应从“字节是否正确”开始,而不是先修改页面字体或反复尝试不同编码。可以按照数据流逐段确认。
还要注意,URL 百分号表示、Base64 和转义符并不等同于中文⭐字符编码。它们可以对已经编码后的字节进行再次包装,但不能替代 UTF-8、GBK 等字符编码规则。遇到“中文有码”这类说法时,最重要的是继续追问具体的字符集、编码格式和数据所在环节,这样才能准确判断如何存储、转换和传输中文。
字符转换不是简单地修改文件后缀,也不是把一串乱码直接替换成可见文字。正确过程是先按照原编码解码成内部字符,再按照目标编码重新编码。
一段中文从程序进入数据库,再通过接口传给另一台设备,可能经过文件、网络协议、消息队列和日志系统等多个环节。只要其中一环没有明确编码,数据就可能在某个节点变成问号、方框或不可识别字符。
新项目通常可以把 UTF-8 作为统一默认值,因为它对英文兼容性较好,也便于不同语言、系统和平台之间交换数据。对于必须兼容旧系统的场景,应在边界处完成 GBK 或 GB18030 与 Unicode、UTF-8 之间的转换,程序内部尽量使用统一的 Unicode 字符表示。