在使用codesmith写模板生成代码时,遇到了两种中文乱码的问题:模板内中文乱码,模板生成的文件中中文乱码。
一、模板内中文乱码:
使用codesmith写模板时,保存后中文会变成乱码,此解决方法,网上很好搜。在此在记录一下。
1、打开CodeSmith Studio
2、打开菜单Tools--〉Options
3、确认Enable unicode support钩上
4、修改你的CodeProject代码,确认具有地下红色部分的信息
<%@ CodeTemplate Language="C#" ResponseEncoding="UTF-8" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
5、完成了
二、用模板生成的文件中的中文乱码:
网上查了一些资料,说codesimth生成的文件的默认编码格式是utf-8格式。网上也找到了一种解决方法,不过没怎么弄明白,在此也记录一下。
网上资料:(两种方法)
1、模板文件是ASII编码,而最终存储的文档则用的是Utf-8,把模板文件另存为Utf-8格式,再生成中文乱码问题解决。
2、为此我们可以更改其CodeSmith的脚本的方法来处理:(原文)(另一参考)
以下为修改的代码。
//首先增加2行
public System.Text.Encoding enc = System.Text.Encoding.GetEncoding("Unicode");
public System.IO.StreamWriter txt;
//找到下面这句话
//this.ClassTemplate.RenderToFile(classFileName, true);
//上面这段话更改成下面的代码
txt = new System.IO.StreamWriter(classFileName,false,enc );
txt.Write(ClassTemplate.RenderToString());
txt.Close();
//再找到下面这句话
//this.MappingTemplate.RenderToFile(mappingFileName, true);
//上面这段话更改成下面的代码
txt = new System.IO.StreamWriter(mappingFileName,false,enc );
txt.Write(MappingTemplate.RenderToString());
txt.Close();
3、自己总结的方法,主要针对生成的文件后结合Visual Studio使用的情况。
生成完文件后,把文件加入到项目中,别使用“双击”的方式打开文件。右键点击要打开的文件,然后选择打开方式从中选择“带编码的编辑器”打开,比如:如果要打开aspx文件可以选择“带编码的HTML编辑器”,打开.cs文件可以选择“带编码功能的CSharp编辑器”,这样中文就不会乱码了。最好在生成的aspx文件头家商这样一句“<meta http-equiv="content-type" content="text/html; charset=utf-8">”,显式制定编码格式。
这是目前总结的一些问题,希望对大家有用。