Git推送至远程仓库时SQL文件中ñ等特殊字符变为�如何解决
问题背景
将本地分支改动推送到Git远程分支时,SQL文件中的ñ等特殊字符被自动替换为�,本地与远程的显示效果如下:
- 本地显示:

- 远程显示:

问题原因
该类乱码本质是UTF-8解码失败的占位符,核心诱因有三类:
- 文件编码不匹配:本地SQL文件使用非UTF-8编码(如Latin1、GBK等)存储,ñ这类特殊字符的字节序列不符合UTF-8编码规则,Git默认按UTF-8处理文本文件时转码失败,就会将无法识别的字节替换为�。
- Git编码配置错误:本地Git未正确设置编码相关参数,提交、推送过程中强制对文件内容转码,导致特殊字符字节被损坏。
- 编辑器保存逻辑异常:本地编辑器默认使用非UTF-8编码保存文件,写入时特殊字符的字节就已经存在隐性问题,推送至远程后问题暴露。
修复方案
临时修复(针对当前已损坏的文件)
- 保留本地未损坏的原始文件,用编辑器打开后强制以*UTF-8(无BOM)*格式重新保存,再重新提交推送即可。
- 若本地原始文件已丢失,可使用
iconv工具尝试转码修复,参考命令:
需根据原文件实际编码替换命令中的iconv -f ISO-8859-1 -t UTF-8 损坏的目标文件.sql > 修复后文件.sqlISO-8859-1参数。
永久修复(避免后续再出现同类问题)
- 统一团队编码规范:所有SQL、配置类文本文件统一要求使用UTF-8(无BOM)格式存储,从根源避免编码差异。
- 配置全局Git编码参数,执行以下命令生效:
git config --global core.quotepath false git config --global i18n.commitencoding utf-8 git config --global i18n.logoutputencoding utf-8 - 将本地常用编辑器的默认保存编码设置为UTF-8,避免保存文件时自动转码为其他格式。
内容的提问来源于stack exchange,提问作者JamesBowery
相关产品推荐
相关产品推荐

