我需要處理「git ls-files」的輸出。如果文件名具有特殊字符,我得到無用輸出:在Git-output中修改特殊字符
FRANZÖSISCH.txt -> FRANZ\303\226SISCH.txt
NIEDERLÄNDISCH.txt -> NIEDERL\303\204NDISCH.txt
不管我什麼編碼(我使用C#)的值不轉換爲字符「O」或「A」
這裏使用的是什麼編碼,以及如何轉換成實際的文件名?
我需要處理「git ls-files」的輸出。如果文件名具有特殊字符,我得到無用輸出:在Git-output中修改特殊字符
FRANZÖSISCH.txt -> FRANZ\303\226SISCH.txt
NIEDERLÄNDISCH.txt -> NIEDERL\303\204NDISCH.txt
不管我什麼編碼(我使用C#)的值不轉換爲字符「O」或「A」
這裏使用的是什麼編碼,以及如何轉換成實際的文件名?
對於非ASCII字符(如Ö和Ä(以及ç和ø等))的編碼有點棘手。 Git 嘗試在這裏使用UTF-8,但是在組合字符方面存在問題。有關詳細信息和一些解決方法,請參閱Git and the Umlaut problem on Mac OS X。鑑於您使用C#,您可能在Windows上;我不確定Git必須做些什麼來保持Windows的快樂。
因此,這裏是我發現了什麼......
與git的整合是最可靠的方法在utf-8上使用手動編碼的二進制協議。
對於你的情況git ls-files
,你可以指定選項-z
,這樣它就可以按原樣寫入文件名(它們在git中存儲爲utf-8)並將它們與零字節分開。
然後從二進制Stream
輸出,由Console.OpenStandardInput提供,如果你管的git的輸出應用消費,或者檢查this answer如何讓子進程的二進制輸出,如果你從你的應用程序運行git ls-files
。
謝謝。我不喜歡git的是,這些信息非常隱蔽!例如。以獲得狀態幫助: -z 使用NUL而不是LF終止條目。這意味着如果沒有給出其他格式的話 - 輸出格式。 和ls-files上的幫助: -z \ 0線路輸出端接。 –