我正在使用C#程序读取Git日志输出并从中解析报告。基本上我运行一个命令
git log --name-status --pretty=fuller --after="2016-08-14" -before="2016-11-03"
使用以下代码。
// create the ProcessStartInfo using "cmd" as the program to be run,
// and "/c " as the parameters.
// Incidentally, /c tells cmd that we want it to execute the command that follows,
// and then exit.
System.Diagnostics.ProcessStartInfo gitInfo = new System.Diagnostics.ProcessStartInfo();
gitInfo.CreateNoWindow = true;
gitInfo.RedirectStandardError = true;
gitInfo.RedirectStandardOutput = true;
gitInfo.FileName = GIT_installed_directory + @"\bin\git.exe";
// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
gitInfo.RedirectStandardOutput = true;
gitInfo.UseShellExecute = false;
// Do not create the black window.
gitInfo.CreateNoWindow = true;
gitInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
// Now we create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process GitProcess = new System.Diagnostics.Process();
gitInfo.Arguments = GIT_command; // such as "fetch orign"
gitInfo.WorkingDirectory = GIT_Repository_Path;
GitProcess.StartInfo = gitInfo;
GitProcess.Start();
// Get the output into a string
string result = GitProcess.StandardOutput.ReadToEnd();
result = result + GitProcess.StandardError.ReadToEnd();
GitProcess.WaitForExit();
GitProcess.Close();
从Git读取的结果以字符串形式获得。最初没有任何编码,Git的输出以一种有趣的方式显示了所有斯堪的纳维亚人物。
E.g。 “Käytettävyys”(“Käytettävyys”)
我将编码添加到UTF8后
gitInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;
Git commit中给出的注释获得了正确的编码,但文件名中的斯堪的纳维亚字符被转换为转义字符。
参见示例: 这是直接来自Git cmd控制台。
D:\>git log --name-status --pretty=fuller --after="2016-08-14" --before="2016-11-07"
commit 07754d5dd6b0f105233e73068a636c59b875b5f6
Author: xxxxxxxx
AuthorDate: Fri Nov 4 13:27:57 2016 +0200
Commit: xxxxxxxx
CommitDate: Fri Nov 4 13:27:59 2016 +0200
Kosmeettinen muutos
M xxxxxxxxxx/Pelkkää KÖKKÖÄ.mrx
M xxxxxxxxxx/Pelkkää KÖKKÖÄ.rpx
commit 28713f66ad16231315e2cf5318e4e2b3815305eb
Author: xxxxxxxxxx
AuthorDate: Fri Nov 4 13:24:48 2016 +0200
Commit: xxxxxxxxxx
CommitDate: Fri Nov 4 13:24:51 2016 +0200
Lisätty gittiin ääkkösten ja öökkästen testaamista varten
A xxxxxxxxxx/Some file.mrx
A xxxxxxxxxx/Some file.rpx
A xxxxxxxxxx/Pelkkää KÖKKÖÄ.mrx
A xxxxxxxxxx/Pelkkää KÖKKÖÄ.rpx
commit 6276b2ef46c7d6ff737a65583c4afe6b02a01bb4
这与我的C#程序中的输出相同:
commit 07754d5dd6b0f105233e73068a636c59b875b5f6
Author: xxxxxxxx
AuthorDate: Fri Nov 4 13:27:57 2016 +0200
Commit: xxxxxxxx
CommitDate: Fri Nov 4 13:27:59 2016 +0200
Kosmeettinen muutos
M "xxxxxxxx/Pelkk\303\244\303\244 K\303\226KK\303\226\303\204.mrx"
M "xxxxxxxx/Pelkk\303\244\303\244 K\303\226KK\303\226\303\204.rpx"
commit 28713f66ad16231315e2cf5318e4e2b3815305eb
Author: xxxxxxxx
AuthorDate: Fri Nov 4 13:24:48 2016 +0200
Commit: xxxxxxxx
CommitDate: Fri Nov 4 13:24:51 2016 +0200
Lisätty gittiin ääkkösten ja öökkästen testaamista varten
A xxxxxxxxxx/Some file.mrx
A xxxxxxxxxx/Some file.mrx
A "xxxxxxxx/Pelkk\303\244\303\244 K\303\226KK\303\226\303\204.mrx"
A "xxxxxxxx/Pelkk\303\244\303\244 K\303\226KK\303\226\303\204.rpx"
commit 6276b2ef46c7d6ff737a65583c4afe6b02a01bb4
我还需要进行哪些额外的转换才能获得正确的文件名?
答案 0 :(得分:0)
据我所知,GIT使用ErrorOutput
,所以:
gitInfo.Standard**Error**Encoding = System.Text.Encoding.UTF8;
是我的解决方案。