GIT乱码原因解决方法及解释

这篇具有很好参考价值的文章主要介绍了GIT乱码原因解决方法及解释。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现象:
GIT 中的中文名: 中文.txt 会转码为:

 "src/components/\344\270\255\346\226\207.txt"

解决方法:

$ git config  core.quotepath false

原因:

“中”是按UTF8编码存在磁盘上,真实的2进制编码为:

11 100 100 10 111 000 10 101 101

8进制为 (这里要留意:是按每个byte,8bit最左补0,9bit来转换;而不是简单合到一起转换):

011 100 100 | 010 111 000 | 010 101 101
3 4 4 | 2 7 0 | 2 5 5

16进制编码为

e4 b8 ad

参考代码

16进制的获取方法很多:

  • python: print('中'.encode('utf8'))b16=[hex(b) for b in '中'.encode('utf8')]
  • ES6: encodeURIComponent("中");
  • Java: System.out.println(URLEncoder.encode("中","utf8"))
  • Mysql: select '中', HEX('中'), char(0xE4B8AD using utf8mb4)

8进制的获取方法:

  • python: b8=[oct(b) for b in '中'.encode('utf8')];

  • ES6: let [b10,b8,b2]=[[],[],[]];new TextEncoder().encode("中").forEach(b=>{b10.push(b); b8.push(b.toString(8)); b2.push(b.toString(2));});console.log(b10,b8,b2);

  • Java Bytes.asList("中".getBytes("utf8")).stream().forEach(_b->System.out.println(Integer.toOctalString(_b & 0xFF) + " "));

  • MySQL select OCT(0xE4), OCT(0xB8), OCT(0xAD)

2进制的获取方法:

  • python: b2=[bin(b) for b in '中'.encode('utf8')]

  • ES6: let [b10,b8,b2]=[[],[],[]];new TextEncoder().encode("中").forEach(b=>{b10.push(b); b8.push(b.toString(8)); b2.push(b.toString(2));});console.log(b10,b8,b2);

  • Java Bytes.asList("中".getBytes("utf8")).stream().forEach(_b->System.out.println(Integer.toBinaryString(_b & 0xFF) + " "));

  • Mysql select BIN(0xE4), BIN(0xE4), BIN(0xAD)

Git源代码参考

源文件片段 quote.c:

if (cq_lookup[ch] >= ' ') {
	EMIT(cq_lookup[ch]);
} else {
	EMIT(((ch >> 6) & 03) + '0');
	EMIT(((ch >> 3) & 07) + '0');
	EMIT(((ch >> 0) & 07) + '0');
}

解释:
#11 100 100 转8进制 344
#11 100 100 (ch >> 6) & 03 >>> 11 & 11 >>> 11 >>> 3
#11 100 100 (ch >> 3) & 07 >>> 11100 & 111 >>> 100 >>> 4
#11 100 100 (ch >> 0) & 07 >>> 11100100 & 111 >>> 100 >>> 4

补充:16|8|2进制编码转中文:文章来源地址https://www.toymoban.com/news/detail-788175.html

  • python:
print('------------------------------decode---------------------------------')
print(bytes([int(b,2) for b in b2]).decode("utf-8"))
print(bytes([int(b,8) for b in b8]).decode("utf-8"))
print(bytes([int(b,10) for b in b10]).decode("utf-8"))
print(bytes([int(b,16) for b in b16]).decode("utf-8"))
  • ES6:
new TextDecoder().decode(Uint8Array.from(b10))
new TextDecoder().decode(Uint8Array.from(b8.map(b=>{return parseInt(''+b,8)})))
new TextDecoder().decode(Uint8Array.from(b2.map(b=>{return parseInt(''+b,2)})))
  • Java
  //bytes to char
    System.out.println(newString(new int[]{228,184,173},10, "utf8"));
    System.out.println(newString(new int[]{344,270,255},8, "utf8"));
    System.out.println(newString(new int[]{11100100,10111000,10101101},2, "utf8"));
    
    public static String newString(int[] i, int radix,String encoding) throws UnsupportedEncodingException {
	    byte[] b2= new byte[i.length];
	    for (int j=0;j<i.length;j++) {
	        int i1 = Integer.parseInt("" + i[j], radix);
	        b2[j]=(byte) (i1 & 0xFF);
	    }
	    String utf8 = new String(b2, encoding);
	    return utf8;
	}
  • Mysql select '中', char(0xE4B8AD using utf8mb4)

到了这里,关于GIT乱码原因解决方法及解释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Git使用——IDEA中git branch显示乱码 & 后面提示standard input 如何解决

    idea中的terminal中输入git branch显示乱码 在idea的file里面,进行设置 选择安装的git下面的bash 参考博客: https://blog.csdn.net/weixin_39925939/article/details/122410453

    2024年02月04日
    浏览(50)
  • git push 出现fatal: unable to access…not resolve host:…报错的多方面原因及解决方法

    在git push -u origin \\\"master\\\"出现以下报错 fatal: unable to access  https://gitee.com.…….git/ : Could not resolve host: gitee.com.…… 在网上查阅、试了各种办法,都解决不了,最后发现自己有如下一些错误,也不知道哪一个导致了这样的结果,但是都更改后成功提交了。 1、我发现我刚注册的账

    2024年02月08日
    浏览(60)
  • git push 出现fatal: unable to access…not resolve host:…报错的多方面原因及解决方法 Merge branch 'master' of ...

    在git push -u origin \\\"master\\\"出现以下报错 fatal: unable to access  https://gitee.com.…….git/ : Could not resolve host: gitee.com.…… 在网上查阅、试了各种办法,都解决不了,最后发现自己有如下一些错误,也不知道哪一个导致了这样的结果,但是都更改后成功提交了。 1、我发现我刚注册的账

    2024年02月16日
    浏览(55)
  • DEV C++光标不在有汉字一行时汉字不显示以及中文乱码问题解决方法

    前言:博主刚开始使用DEV C++时真的是被这两个问题搞得焦头烂额(orz),以至于有中文时都用拼音代替,但是这样程序运行出来后实在是太影响阅读了。于是我上网搜集资料,但网上的资料真的是让人眼花缭乱,于是在此我把这两个问题罗列出来,用图文方式简单粗暴的让读

    2023年04月08日
    浏览(44)
  • 使用git时候提交时候发生冲突,你能解释冲突如何产生,你是如何解决的

    Git冲突情况举例: 简单来说就是本地修改的文件和目标远程库的同一个文件都有修改。这时无论是pull/push/merge时都会产生冲突。 1、不同分支下的merge 比如在不同分支下进行分支合并时,我们在本地修改了a文件并把a文件的修改push到了test分支下,接着我们切换到master分支下将

    2024年02月08日
    浏览(53)
  • git代码合并、git解决冲突的方法?

    Git是一种分布式版本控制系统,它提供了多种方法来合并代码和解决冲突。下面是两个常见的场景以及对应的操作步骤: 合并分支 当我们在一个项目中有多个分支时,需要将不同分支中的代码合并到一起。假设我们有一个主分支master和一个开发分支dev,现在需要将dev分支合

    2024年02月02日
    浏览(53)
  • git拉取失败/git fatal终极解决方法

    被折磨不下20次总结出来的终极方案 首先关闭代理试试,不行就下一步 重置代理或者取消代理的方式 添加全局代理 再次尝试,不行就下一步 找到host文件,目录如下: C:WindowsSystem32driversetc 获取github的IP地址(隔几天就会有点变化,所以不要以为改一次就一劳永逸了) htt

    2024年02月12日
    浏览(40)
  • git上传仓库内容超过100M解决方法git

    报错例如: 原因是上传文件最大只能上传100M,所以这里要把太大的文件删除,然后重新提交git 操作步骤如下: 1、先找到文件的具体路径(执行方法上述报错中有) 参考:git rev-list --objects --all | grep 你commit的版本号 2、执行删除 参考:git filter-branch -f --prune-empty --index-filte

    2024年02月14日
    浏览(34)
  • git commit遇到with ‘#‘ will be ignored, and an empty message aborts the commit.或git log失败的原因及两种解决方案。

    git add与commit操作已经搞完了,git log碰到下面的问题 或者 git提交时,使用了git commit 文件名 时弹出了以下窗口  文段翻译过来的大意为: 请为本次修改键入commit命令的相关消息,以#开头的行被挡住注释(被忽略),一个空的消息(啥都不输入)将视为放弃本次commit提交。 1、改用

    2024年02月16日
    浏览(50)
  • git报错:Reinitialized existing Git repository in ...解决方法

    初始化git项目时,报错 Reinitialized existing Git repository in… 该路径中已经存在.git文件了 可以在当前文件下的控制台中输入 ls-a 查看,有.git 的话,使用 rm -rf .git 删除之后重新初始化就可以了

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包