天天看點

C# 檔案流建立批處理檔案(.bat)執行出現亂碼問題描述問題解決

目錄

問題描述

問題解決

方法1

方法2

問題描述

通過C# 的 File 相關的對象進行檔案流編寫并輸出為.bat 檔案時,需要設定編碼格式為“GB2312”否則會出現執行 .bat 檔案時控制台出現亂碼無法識别響應指令。

問題解決

.net framework 直接使用如下代碼即可。

Encoding.GetEncoding("gb2312")
           

.net core 需要單獨引用 Nuget 包“System.Text.Encoding.CodePages”

方法1

并通過如下代碼即可完成GB2312編碼對向的建立。

System.Text.CodePagesEncodingProvider.Instance.GetEncoding("gb2312")
           

方法2

在Starup.cs的Configure方法或是Main(string[] args)方法中增加如下代碼,即可完成注冊。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)
           

注冊成功後,即可使用如下代碼:

Encoding.GetEncoding("gb2312")
           

例子:

//建立BAT 
                    string fileName = $"{Environment.CurrentDirectory}\\install.bat";

                    StringBuilder argsString = new StringBuilder(); 
                    argsString.AppendLine($"sc create EMSDataCollector binpath= {Environment.CurrentDirectory}\\{Assembly.GetExecutingAssembly().GetName().Name}.exe start= auto obj= LocalSystem");
                    argsString.AppendLine("sc description EMSDataCollector 能源資料采集器服務(EMSDataCollector)版權歸屬測試公司,中文出現亂碼的地方。版本:2020.12.25。");
                    argsString.AppendLine("sc start EMSDataCollector");
                    argsString.AppendLine("pause");
                    //File.WriteAllText(fileName,argsString.ToString(), Encoding.GetEncoding("gb2312"));
                    File.WriteAllText(fileName,argsString.ToString(), System.Text.CodePagesEncodingProvider.Instance.GetEncoding("gb2312"));
                     
                    Process.Start(fileName);
           

繼續閱讀