目录
问题描述
通过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);