火星文 技术研习社

Noname Cat, Keep Thinking
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

NVelocity 0.5 乱码

Posted on 2006-10-18 17:51  剑廿三  阅读(1133)  评论(0编辑  收藏  举报
http://my.donews.com/hjue/2006/06/16/monorails-nvelocity-viewengine-encoding/

第一次使用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