我需要处理“git ls-files”的输出。如果文件名有特殊字符,我将无法输出:
FRANZÖSISCH.txt -> FRANZ\303\226SISCH.txt
NIEDERLÄNDISCH.txt -> NIEDERL\303\204NDISCH.txt
无论我尝试使用哪种编码(我使用C#),这些值都不会转换为字符“Ö”或“Ä”
这里使用什么编码以及如何转换为实际的文件名?
答案 0 :(得分:1)
所以这就是我发现的......
答案 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的快乐。