Git - 路径乱码

  • date_range 2018-11-06 info
    sort
    issues
    label
  1. 现象
  2. 解决方案
  3. 解析

Git现今已经支持UTF-8,但是路径名默认不使用UTF-8。

现象

Git文件路径中存在中文名,就会出现该乱码:

1
2
3
4
5
6
7
Changes not staged for commit:
	modified:   "../_posts/2018-11-03-Golang - exec\346\216\247\345\210\266\345\217\260\344\271\261\347\240\201.md"
	modified:   "../_posts/2018-11-03-Golang---exec\345\255\246\344\271\240\347\254\224\350\256\260.md"

Untracked files:
	"../_posts/2018-09-14-rabbitmq\350\256\276\350\256\241.md"
	"../_posts/2018-09-15-\347\211\210\346\234\254\347\256\241\347\220\206.md"

解决方案

通过指令:https://git-scm.com/docs/git-config#git-config-corequotePath

1
 git config --global core.quotepath off

恢复正常状态:

1
2
3
4
5
6
7
Changes not staged for commit:
	modified:   ../_posts/2018-11-03-Golang - exec控制台乱码.md
	modified:   ../_posts/2018-11-03-Golang---exec学习笔记.md

Untracked files:
	../_posts/2018-09-14-rabbitmq设计.md
	../_posts/2018-09-15-版本管理.md

我们发现,正确的与错误的,除了乱码 (八进制编码) 以外还有一个区别——双引号。Git对于非ASCII编码的路径,通过「引用+八进制转码」处理。

解析

原因:

控制台的使用的人群 (维护开发者) 和客户群是不同,若开发的为Web系统,客户群可在window系统下通过浏览器进行页面交互 (可能是中文页面) ,而维护开发者仍旧通过控制台进行交互 (数据、代码、英文) ,两者所面对的数据形式和自然语言人群可能是不同的。

其次,维护开发者往往是纯键盘操作,因此应使用通用简单的方式。日语和中文等语言并非由英文字母组成,又其自身的独特性,如 “有り難い”,需要使用者

  1. 切换输入法
  2. 认识 “有り難い”的发音

否则,无法获得“有り難い”这个词,因此增加了维护开发者的工作量和难度。

因此,推荐使用quote (引用) 的方式,对非ASCII (非英文) 的字符进行处理。另外,quote的方式方便反斜杠等特殊符号。