将CodeSmith的输出文件在VS2005中打开,发现中文变成了乱码,看了一下CodeSmith的帮助,将ReponseEncoding属性改成"UTF-8",再重新输出,用VS打开,还是乱码。没办法,在VS的选项里面看看吧,意外发现“文本编辑器”->“常规”中有一个自动检测不带签名的UTF-8编码,选上,中文乱码终于露出了原形。找了一些资料看看,总算知道了原因:Windows为了识别Unicode、Unicode big endian和UTF-8,在Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。而CodeSmith的输出UTF-8是标准的未加标识的。这样VS就不能识别出输出文件的编码了。
为此我们可以更改其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();
评论(0)
暂无评论。