第一次使用Castle的MonoRails,下载了Castle的Demo-MoviesDemo。
随便在List.vm中加了几个中文,发现在浏览器中显示居然是乱码(我使用的ViewEngine是nVelocity)。
查了nVelocity的文档,发现是需要设置encoding。
在view的根目录下新建个文本文件nvelocity.properties ,内容如下:
input.encoding=utf-8 output.encoding=utf-8
重启IIS后,中文出现了。
http://bbs.dotnettools.org/newsdetail.asp?id=4095
这两天在评估monorail,随手记下来一些现在可能还google不到的东西
使用nvelocity会感觉又回到原始的状态,但这可能比较适合从java过来的用户
nvelocity 中使用中文乱码?
修改NVelocity.Runtime.Defaults.nvelocity.properties中的
input.encoding
output.encoding
使其和你的编码相匹配,通常是GB2312或是UTF-8,然后重新编译
其实,正确的途径应该是先看看bin中有无nvelocity.properties文件,然后再读取assembly中的资源文件的,并进行合并。
如果你有兴趣,可以修改Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine的Init过程,修改成这样,仅举例
public class NVelocityViewEngine : ViewEngineBase { public override void Init() { ExtendedProperties props =new ExtendedProperties(); if (File.Exists("nvelocity.properties")) props.Load(File.OpenRead("nvelocity.properties"); props.SetProperty(RuntimeConstants_Fields.RESOURCE_MANAGER_CLASS, "NVelocity.Runtime.Resource.ResourceManagerImpl\\,NVelocity"); props.SetProperty(RuntimeConstants_Fields.FILE_RESOURCE_LOADER_PATH, ViewRootDir); Velocity.Init(props); }
这样,你就可以通过在bin目录下直接放一个nvelocity.properties,包含以下内容即可,无需重新编译nvelocity
input.encoding=GB2312
output.encoding=GB2312