使git diff正确显示UTF8编码的字符

Tob*_*bbe 34 git encoding utf-8

我有一个带有瑞典字符的文件(åäö),用UTF8编码.

如果我cat的文件显示正常,但如果我这样做git diff,则打印特殊字符,例如,<F6>.

示例git diff输出:

-            name: 'Magler<F6>d, S<F6>der<E5>sen',
Run Code Online (Sandbox Code Playgroud)

我想看到的:

-            name: 'Magleröd, Söderåsen',
Run Code Online (Sandbox Code Playgroud)

我发现了另一个与git和编码问题相关的问题:git,msysgit,accents,utf-8,权威答案 它说所有问题都应该在git 1.7.10中修复.我有1.8.1.2版

我该怎么做才能使git diff正确显示åäö?

Edw*_*son 54

git正在倾销原始字节.在这种情况下,它不关心文件的编码是什么.<F6>你看到的突出显示来自less,可能是你的配置PAGER.尝试设置:

LESSCHARSET=UTF-8
Run Code Online (Sandbox Code Playgroud)

  • 整个命令是`export LESSCHARSET = utf-8`不是吗? (5认同)
  • 仅供参考,如果您想永久更改(不必每次登录机器时都使用命令`export LESSCHARSET = utf-8`),只需将其添加到`〜/ .bashrc`文件中即可 (5认同)
  • 另一种选择是在你的 `~/.gitconfig` 或 `.git/config` 中设置环境变量。就我而言,我在 `[core]` 部分有 `pager = LESSCHARSET=utf-8 less -R`。 (4认同)

Tob*_*bbe 4

@matt 和 @twalberg 是正确的。该文件实际上并不是 UTF-8 编码的。由于我的终端(hterm)无法正确输入 \xc3\xa5\xc3\xa4\xc3\xb6 (但它可以显示和复制/粘贴它们),试图弄清楚这一点并没有帮助...

\n\n
iconv -f ISO-8859-1 -t UTF-8 in.txt > out_utf-8.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

解决了我的问题

\n

  • 实际上,您可以在不写入中间文件的情况下查看差异,即使命令行有点冗长:`git diff --color | iconv -f iso-8859-1 -t utf8 | iconv -f iso-8859-1 -t utf8 | iconv -f iso-8859-1 -t utf8 less -r` 其中 `--color` 强制 `git` 将 ascii 颜色输出到管道中,而 `-r` 则强制 `less` 将这些颜色转义流传输到终端。 (2认同)