在Git输出中转义特殊字符

时间:2016-11-18 14:43:34

标签: git escaping

我需要处理“git ls-files”的输出。如果文件名有特殊字符,我将无法输出:

FRANZÖSISCH.txt -> FRANZ\303\226SISCH.txt
NIEDERLÄNDISCH.txt -> NIEDERL\303\204NDISCH.txt

无论我尝试使用哪种编码(我使用C#),这些值都不会转换为字符“Ö”或“Ä”

这里使用什么编码以及如何转换为实际的文件名?

3 个答案:

答案 0 :(得分:1)

所以这就是我发现的......

  1. Git使用Octal Escape Sequence:graphemica.com
  2. 转换非常简单:related answer on stackoverflow

答案 1 :(得分:1)

与git集成的最可靠方法是使用二进制协议和utf-8手动编码。

git ls-files的情况下,为它指定选项-z,以便它按字面意思写入文件名(它们在git中存储为utf-8)并用零字节分隔它们。 / p>

然后使用由Console.OpenStandardInput提供的二进制Stream的输出,如果将git的输出传递给应用程序,或者检查this answer如何获取子的二进制输出过程,如果您从应用程序运行git ls-files

答案 2 :(得分:0)

Ö和Ä(以及ç和ø等非ASCII字符)的编码有点棘手。 Git 尝试在这里使用UTF-8,但是组合字符存在问题。有关详细信息和一些解决方法,请参阅Git and the Umlaut problem on Mac OS X。鉴于您使用的是C#,您可能在Windows上;我不确定Git必须做些什么来保持Windows的快乐。