解决CodeSmith输出文件的编码格式为有bom的UTF-8的问题

背景

项目中使用CodeSmith生成通用的JAVA代码文件。但是复制到项目文件中,使用Maven编译时,会报页面有非法字符。错误信息如下:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] \src\main\java\com\web\controller\XXXXController.java:[1,0] 错误: 非法字符: '\ufeff'
[ERROR] \src\web\src\main\java\com\web\controller\xxxxxController.java:[1,9] 错误: 需要class, interface或enum

原因

经过一顿搜索,发现是CodeSmith生成的文件格式为“UTF-8 BOM+” 。而在maven编译时,不支持此格式。

解决

找到原因后,那就只需要在文件生成之后,再将UTF-8 BOM+的格式转换成UTF-8格式即可。

CodeSmith使用的是c#的为模板语言,万幸当年做过几年C#开发。通过以下代码转换,即可生成UTF-8的文件。

// 增加引用IO命名空间
<%@ Import NameSpace="System.IO" %>

// 。。。。。。

<script runat="template">

// 文件生成代码

private void RenderTamplate(String editableFileName)  {
    entityTemplate businessObject = this.Create<entityTemplate>();
    // 老方法,使用 UTF-8 BOM + 格式 
    // businessObject.RenderToFile(new OutputFile(editableFileName), true);

    if (!Directory.Exists(Path.GetDirectoryName(editableFileName)))
    {
        Directory.CreateDirectory(Path.GetDirectoryName(editableFileName));
    }

    // 使用UTF-8格式写文件
    using (FileStream fs = new FileStream(editableFileName, FileMode.Create, FileAccess.Write))
    {
        using (StreamWriter sw = new StreamWriter(fs, new System.Text.UTF8Encoding(false))) // false表示使用UTF-8格式。
        {
            sw.Write(businessObject.RenderToString());
            sw.Flush();
            fs.Flush();
        }
    }
}

</script>

参考文章:

https://blog.csdn.net/yanxin9210/article/details/78969559

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值