关于freemarker静态化生成html页面 乱码的问题
来源:互联网 发布:ftp 默认端口 编辑:程序博客网 时间:2024/06/05 18:48
今天在整理之前所学的知识,在复习freemarker生成html页面的时候出现了中文乱码的问题,
在费了一番时间后终于找到问题的原因,觉得挺有意思,就把这段记录下来。
下面是springmvc的核心代码
<!-- freemarker的配置 --> <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <!-- templateLoaderPath :前缀 --> <property name="templateLoaderPath" value="/WEB-INF/ftl/"></property> <!-- 编码 --> <property name="defaultEncoding" value="utf-8"></property> <!-- 可选的配置 --> <property name="freemarkerSettings"> <props><prop key="template_update_delay">10</prop><prop key="locale">zh_CN</prop><prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop><prop key="date_format">yyyy-MM-dd</prop><prop key="time_format">HH:mm:ss</prop><!-- 页面数值的显示格式 --><prop key="number_format">#.##</prop><!-- 88,282,882,888,888 --><!-- 88282882888888.00 --></props> </property> </bean> <!-- freemarker的解析器 --> <bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <!-- 后缀 .ftl:是freemarker模板文件的后缀 --> <property name="suffix" value=".ftl"></property> <property name="contentType" value="text/html;charset=utf-8"></property> <!-- 方便页面获得项目的绝对路径 --> <property name="requestContextAttribute" value="request"></property> </bean>
然后是controller的核心代码
@RequestMapping("/getHtml")public String getHtml(HttpServletRequest request,HttpServletResponse response) throws Exception{//第一步 freemarkerConfigurer得到一个Configure对象Configuration configuration = freeMarkerConfigurer.getConfiguration();//第二步 得到一个模版文件Template template = configuration.getTemplate("index.ftl"); //第三步 构建数据模型Map<String, Object> map = new HashMap<String, Object>();map.put("uname", "zhangsan");map.put("bookList", BookDaoImpl.getBookList());System.out.println(BookDaoImpl.getBookList().get(0).getAuthor());//第四步 指定一个文件夹 构建一个输出流String dir = request.getSession().getServletContext().getRealPath("/WEB-INF/");//PrintWriter printWriter = new PrintWriter(new FileWriter(new File(dir,"index.html")));System.out.println(dir);//第五步 数据模型+模版文件 = 输出(控制台输出,html文件)template.process(map, printWriter);printWriter.flush();return "success";}最后页面提示成功生成html页面
但在进入生成的html页面时发生了乱码
在网上也查了下大致给了以下几种解决方案
首先是说ftl文件的head上加上
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">因为我在springmvc的视图解析器配置了
<property name="contentType" value="text/html;charset=utf-8"></property>
所以这个选择首先pass掉,然后说是在controller里加上
configuration.setDefaultEncoding("UTF-8");
不过因为我在freemarker的环境配置我也配置了默认的编码
<!-- 编码 --> <property name="defaultEncoding" value="utf-8"></property>所以应该也不是这个原因,后来我找到生成的html文件,发现用浏览器查看源代码虽然会乱码,但用记事本打开的时候所显示并没有乱码,然后判断是输出流的问题,通过网上查找发现FileWriter和FileReader使用的是系统默认的编码方式,因为fileWriter本身不具有用户指定编码的方式,这里选择使用filewriter 的父类OutputStreamWriter来读写操作,把代码
String dir = request.getSession().getServletContext().getRealPath("/WEB-INF/");//PrintWriter printWriter = new PrintWriter(new FileWriter(new File(dir,"index.html")));替换成
String dir = request.getSession().getServletContext().getRealPath("/WEB-INF/index.html");OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(dir), "UTF-8");PrintWriter printWriter = new PrintWriter(writer);后启动程序
乱码解决了,很开心!
阅读全文
0 0
- 关于freemarker静态化生成html页面 乱码的问题
- 网站静态化生成html的好处
- 关于Freemarker生成静态html文件及中文乱码的问题
- 关于Freemarker生成静态html文件及中文乱码的问题 .
- 使用FreeMarker生成静态页面,解决中文乱码问题源码
- Freemarker生成HTML静态页面
- 关于Freemarker生成静态文件的问题
- 关于Freemarker生成静态文件的问题
- C#.net关于生成html静态页面的问题 .
- C#.net关于生成html静态页面的问题
- html页面的乱码问题
- freemarker生成HTML页面时,遇到乱码的解决办法
- [freemarker篇]02.生成HTML的静态页面
- freemarker生成静态页面中文乱码解决方案
- freemarker生成静态页面出现乱码解决方案
- 利用freemarker、java生成html静态页面
- springmvc + freemarker 解决表单提交、页面显示乱码 的问题
- 静态页面html之间传递中文参数出现乱码问题的解决方案
- 警惕 百度文库可以上传含VBA代码的文件,或成为宏病毒传播途径
- (python3) 1019. 数字黑洞 (20分)
- Tomcat限制post请求文件上传大小
- 软件测试常考面试题及参考答案(待更新)
- Hdoj 1090 A+B for Input-Output Practice (II)
- 关于freemarker静态化生成html页面 乱码的问题
- spring 基础下
- 17.12.13日报
- Java 核心技术卷2 第五章 数据库编程
- Redis学习之list类型及操作
- 网段的小知识。
- 单机单网卡最大tcp长连接数真的是65535吗?
- Excel在统计分析中的应用—第十章—方差分析-单因素方差分析-2
- Mask R-CNN