【问题标题】:Could Git correctly display ISO Latin 1 accents in a UTF-8 terminal?Git 能否在 UTF-8 终端中正确显示 ISO Latin 1 重音?
【发布时间】:2019-12-18 19:34:47
【问题描述】:

Don't display ^M (carriage return) in git grep output分叉

在我的 MinTTY(Windows 上的 Cygwin)中,git grep 显示奇怪的字符而不是重音符号:

经验证,文件类型似乎是:

ISO-8859 text, with very long lines, with CRLF line terminators

虽然我的 MinTTY 设置为 UTF-8:

# Text
Font=Powerline Consolas
FontHeight=9
BoldAsFont=yes
BoldAsColour=yes
AllowBlinking=yes
Locale=C
Charset=UTF-8

# Terminal
Term=xterm-256color

当然,当从不同的 repos 中抓取文件时,我们永远不知道它是哪种编码。

有没有办法让 Git Grep 表现得更好?

PS-(附带问题)这些口音的颜色规格是什么(此处显示为蓝底黄字)?

【问题讨论】:

标签: git utf-8 terminal grep mintty


【解决方案1】:

git grep,很像grep,显示文件的内容,就像它在工作树中一样,没有任何转换。不过,与grep 不同的是,它将通过更少的管道传输。 less 尊重您的区域设置环境(例如,LC_* 选项),它会相应地呈现数据。

如果您的环境正在报告 UTF-8 并且您有非 UTF-8 数据,less 将按照您在此处看到的那样对其进行编码,因为通常替代方法是替换字符或什么都没有,这不是在查看二进制文件时非常有用。

由于less 不知道正在使用什么编码,并且不同的编码会将相同的字节映射到不同的 Unicode 字符,从而映射到不同的 UTF-8 序列,因此无法自动进行转换。 less 甚至不知道文件是文本还是二进制文件。 file 对文件中的文本类型进行了猜测,但不确定,在一般情况下区分单字节编码需要广泛的语言知识。

所以你的回答是,不,在一般情况下,这是不可能的。

【讨论】:

  • 好的,所以你说这是不可能的。但是是否有可能让字符显示为任意字符,而不是输出超过四个字符(如<E0>)和彩色?
  • 您可以使用环境变量LESSBINFMT 来控制它的显示方式(参见man less),但不能将其显示为例如字符è
  • 感谢有用的指针。至少,它现在不那么明显了……
猜你喜欢
  • 2012-12-01
  • 2015-04-22
  • 1970-01-01
  • 2010-10-12
  • 2015-06-20
  • 2015-12-30
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多