windows - Git:Diff 不处理 UTF-8 以外的字符编码?

标签 windows git powershell encoding utf-8

创建了一个 repo,添加了具有以下内容的 UTF8 和 Latin2 编码文件:

árvíztűrő tükörfúrógép
ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP

参见 https://github.com/bimlas/git-test/commit/872370caf91f1faaf931c1228c797f3d10d6435d

git log -p 82904e60 的输出是:

commit 82904e60d1940c036c8190e2a41de6b423727a7c
Author: BimbaLaszlo <bimbalaszlo@gmail.com>
Date:   Mon Jul 27 14:38:35 2015 +0200

    initial commit

diff --git a/fileencoding/latin2.txt b/fileencoding/latin2.txt
new file mode 100644
index 0000000..7165bc9
--- /dev/null
+++ b/fileencoding/latin2.txt
@@ -0,0 +1,2 @@
+<E1>rv<ED>zt<FB>r<F5> t<FC>k<F6>rf<FA>r<F3>g<E9>p^M
+<C1>RV<CD>ZT<DB>R<D5> T<DC>K<D6>RF<DA>R<D3>G<C9>P^M
diff --git a/fileencoding/utf8.txt b/fileencoding/utf8.txt
new file mode 100644
index 0000000..80e1878
--- /dev/null
+++ b/fileencoding/utf8.txt
@@ -0,0 +1,2 @@
+árvíztűrő tükörfúrógép^M
+ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP^M

我在 Linux 和 Windows(我的语言环境是 Latin2)上有相同的输出。在没有寻呼机的情况下尝试 (git --no-pager log -p 82904e60),在没有转义码的情况下得到了相同的结果:

commit 82904e6
Author: BimbaLaszlo <bimbalaszlo@gmail.com>
Date:   2015-07-27 14:38:35 +0200

    initial commit

diff --git a/fileencoding/latin2.txt b/fileencoding/latin2.txt
new file mode 100644
index 0000000..7165bc9
--- /dev/null
+++ b/fileencoding/latin2.txt
@@ -0,0 +1,2 @@
+�rv�zt�r� t�k�rf�r�g�p
+�RV�ZT�R� T�K�RF�R�G�P
diff --git a/fileencoding/utf8.txt b/fileencoding/utf8.txt
new file mode 100644
index 0000000..80e1878
--- /dev/null
+++ b/fileencoding/utf8.txt
@@ -0,0 +1,2 @@
+árvíztűrő tükörfúrógép
+ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP

latin2.txt 的日志是相同的,所以问题不是由在一个输出中混合不同编码的文件引起的。

即使没有分页器,我如何设置 Git 来打印它们应该出现的字符?

编辑

我认为问题与终端无关,例如在 Windows PowerShell 上 latin2.txt 没问题,但 utf8.txt 很奇怪:

Same encoding with different output

最佳答案

Git 根本不关心字符编码。文件只是一堆字节。

显示由您的终端完成。如果它配置为解码为 UTF-8,则您的 latin-2 文件似乎已损坏。如果它被配置为解码为 latin-2,您的 UTF-8 文件似乎已损坏。

也许 encoding 属性(参见 git help gitattributes)能够为一些工具提供如何正确解码文件的提示,但我从未使用过它。 例如,github 可能足够聪明,可以查看此属性并以不同方式解码这些文件。

关于windows - Git:Diff 不处理 UTF-8 以外的字符编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36494026/

相关文章:

windows - 直写 : CreateFontFaceFromHDC() failed

python - 练习 14 艰难地学习 Python

git - 从单独的分支解决 Github 上的 pull 请求 merge 冲突的正确方法

powershell - 保留x个目录并删除所有其他目录,每次都需要排除一个目录及其内容

powershell - 如果省略必需的参数,是否可以强制 PowerShell 脚本抛出?

windows - 调用 TaskDialogIndirect 加载程序说找不到序号 345

c++ - 当其他线程正在等待读取时,写入串行端口将永远阻塞

git - 如何使用smartgit创建远程分支?

git - 在 Visual Studio 代码中检测 git 子文件夹

mysql - 如何在 foreach 循环后向 powershell 添加 SQL 更新语句