`
dengyin2000
  • 浏览: 1224586 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Wicket中页面模板避免中文乱码的写法。

阅读更多
一般来说我们只要保证在IDE中的Editor是使用UTF-8, html head中加上<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> request response的encoding是UTF-8的话, 显示中文是没有问题的。

但是在Wicket这些都没有用。如下面这段html

<html xmlns:wicket="http://wicket.sourceforge.net/">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
我艾你电视大赛房贷首付 df
</body>
</html>


于是我在Wicket example里面的forminput例子中加了一些中文。惊奇的发现中文能够很好的显示。比较了之间的不同。然后满怀希望的把<?xml version="1.0" encoding="utf-8"?>  加到页面顶部。 我靠。中文能够正常显示了。 不过还没有找到原因。为什么Wicket非得加上<?xml version="1.0" encoding="utf-8"?>才能显示正常。我想应该肯定是因为Wicket使用的是xhtml的原因。太晚了。要睡了。

分享到:
评论
9 楼 dengyin2000 2007-06-19  
ok。 现在知道了。

如果你不希望在每个html前面加上<?xml version="1.0" encoding="utf-8"?> 的话。 你需要在你的WebApplication.init里面加上
引用
getMarkupSettings().setDefaultMarkupEncoding("utf-8");


如果没有加上这个的话,他会使用操作系统的编码。

所以如果你在window下面开发的话 html模板使用gbk是不会有乱码的。 但是移到linux可能就不行了。 最保险的做法是让html都为utf-8. 省点事的话就加上getMarkupSettings().setDefaultMarkupEncoding("utf-8");吧

8 楼 dengyin2000 2007-05-24  
wl95421 写道
还算好吧
经验主义错误
不过在Java中
编码问题绝对能排到前三


看看wicket wiki上面的解释。 这次不是猜测。 wicket是通过<?xml version="1.0" encoding="utf-8"?>里面的encoding来parse的,如果没有设定这个,会根据locale来encoding来处理。所以这就解释了如果html 页面的编码是GBK的话就能正常显示。

引用
This entry does not try to cover all aspects of localization. It merely describes how to set the encoding of a markup file and how the encoding of the output html is determined.

    * Each markup file associated with a component might have its own encoding, which is not required to be equal to the HTTP response's encoding. Characters get transformed automatically, if possible.
    * Application settings setDefaultMarkupEncoding() allows to set a default markup file encoding to be used instead of the value which the JVM inherited from the operating systems process environment. If set to null, the OS default value will be used.
    * The XML parser uses an InputStream and a Reader applying the encoding as mentioned above first. Attaching a new Reader with the "correct" encoding for the remaining characters of the markup file, if <?xml encoding="..." ?> is found. That is, besides what (File)Reader already offers, we especially do not interpret the first two bytes of the file, which are allowed to contain information about the (text)file's encoding.
    * Encoding of a markup file content is determined by e.g. <?xml version="1.0" encoding="utf-8"?>. See http://www.w3.org/TR/2000/REC-xml-20001006#charencoding for more details. This is true for HTML as well, which is not 100% XML compliant.
    * The xml declaration string <?xml ..?> of a page's markup is passed through to the http response unchanged, whereas the xml declaration string of a component's markup is not. This is kind of uncomfortable if you need to support IE in quirks mode (see http://www.wellstyled.com/html-doctype-and-browser-mode.html), which is why we support setStripXmlDeclarationFromOutput().
    * If the page's markup does NOT contain a xml declaration string including encoding information, the encoding of the http response is determined by the session's locale. Please read the note below for more details.
    * If the page's markup DOES contain a xml declaration string including encoding information, the encoding of the http header will be modified accordingly (Page.configureResponse)
    * Wicket does not automatically extend the HTTP content type header with charset=..., except as described on the previous note. See below for how you can do it yourself.
    * Wicket has no build in means at all to automatically create/detect/maintain a html meta tags. See below for more details.


wiki:http://cwiki.apache.org/WICKET/how-to-change-the-character-encoding.html

PS: 把这个编码问题加到你的wicket文档上去吧。
7 楼 wl95421 2007-05-24  
还算好吧
经验主义错误
不过在Java中
编码问题绝对能排到前三
6 楼 dengyin2000 2007-05-24  
wl95421 写道
可能我说的不是很清楚

我是说Wicket的Html文件其实是当成XHML来解析的,或者说按照XML规则解析的,比如说它不支持<BR>,一定要使用<BR/>就说明了这一点。

所以如果希望编码正确的话,一定要保证声明
<?xml version="1.0" encoding="utf-8"?>
和文件的保存编码是一致的。


那就是和我主题上猜测相似? tapestry的html模板也是strick的。但是不需要加上<?xml version="1.0" encoding="utf-8"?>这么一句。 只要你的html编码是utf-8,response的encoding是utf-8。浏览器页面是utf-8就行。大多数的web framework也是这样。 但是wicket除此之外还要一定加上<?xml version="1.0" encoding="utf-8"?>。 浪费了我1个多小时。
5 楼 wl95421 2007-05-24  
可能我说的不是很清楚

我是说Wicket的Html文件其实是当成XHML来解析的,或者说按照XML规则解析的,比如说它不支持<BR>,一定要使用<BR/>就说明了这一点。

所以如果希望编码正确的话,一定要保证声明
<?xml version="1.0" encoding="utf-8"?>
和文件的保存编码是一致的。
4 楼 dengyin2000 2007-05-24  
wl95421 写道
如果你在是Eclipse下面的写的这段代码
麻烦通过属性检查一下,它的编码方式

有时候加上<?xml version="1.0" encoding="utf-8"?>
只是表示使用UTF-8进行解码
但不表示文件一定会用UTF-8编码

你可以做个试验,在Eclipse写一个Html文件,使用<?xml version="1.0" encoding="utf-8"?>声明,然后在属性中分别改成GBK和UTF-8编码,就会发现乱码了。

所以声明<?xml version="1.0" encoding="utf-8"?>的时候也要保证文件事实上的编码与声明一致。


我已经把web 项目设成了使用UTF-8编码。 而且我在那个html文件的properties中可以看得到使用的是UTF-8编码。

从java code出来的字符可以正常显示,然而直接写在html页面中的中文显示成乱码。我不知道你有没有试过。如果你没有试过的话, 请你试试不要加上<?xml version="1.0" encoding="utf-8"?>, 让你的文件编码是UTF-8。 看看html 中的中文能不能出来。 我使用的是WICKET1.2.6 TOMCAT 5.517
3 楼 wl95421 2007-05-24  
如果你在是Eclipse下面的写的这段代码
麻烦通过属性检查一下,它的编码方式

有时候加上<?xml version="1.0" encoding="utf-8"?>
只是表示使用UTF-8进行解码
但不表示文件一定会用UTF-8编码

你可以做个试验,在Eclipse写一个Html文件,使用<?xml version="1.0" encoding="utf-8"?>声明,然后在属性中分别改成GBK和UTF-8编码,就会发现乱码了。

所以声明<?xml version="1.0" encoding="utf-8"?>的时候也要保证文件事实上的编码与声明一致。
2 楼 dengyin2000 2007-05-23  
rockmaple 写道
在windows下,我不加<?xml version="1.0" encoding="utf-8"?>,则html编码是GBK可以正常显示,否则是乱码


确实是这样。不知道为什么。 难道是Wicket在解析Html 页面时。如果没有<?xml version="1.0" encoding="utf-8"?>的话  他会自动识别html的内容的编码?  奇怪。。
1 楼 rockmaple 2007-05-23  
在windows下,我不加<?xml version="1.0" encoding="utf-8"?>,则html编码是GBK可以正常显示,否则是乱码

相关推荐

    wicket例子和开发指南

    3. 组件和页面:讲解Wicket中的组件模型,如何创建和使用组件,以及如何组织页面结构。 4. 模型和数据绑定:解释如何处理数据,包括模型对象、数据绑定和模型的生命周期。 5. URL和导航:讨论如何设计友好的URL,...

    Wicket中文开发指南

    同时,参考《Wicket中文开发指南》和在线博文中提供的示例,可以加速学习进程。 总的来说,Wicket为中文Web应用开发提供了强大而灵活的平台。通过深入理解其核心概念和实践,开发者能够构建出高效、用户友好的Web...

    wicket指南

    1. **创建页面类**:在Wicket中,每个页面都有一个对应的Java类,类中定义了页面的组件和行为。 2. **绑定HTML模板**:页面类与HTML模板通过`@MountPath`注解或`WebPage`的构造函数关联。 3. **组件定义**:使用`add...

    Wicket 开发指南

    - **页面(Page)**:Wicket中的顶级组件,代表一个Web页面,可以有多个实例。 - **会话(Session)**:用于存储用户特定的数据,跨请求存活。 - **URL到页面映射(URL to Page Mapping)**:Wicket使用基于类的...

    wicket1.4.7中的jar包

    8. **wicket-devutils.jar**:开发人员辅助工具,如页面调试器、性能监控等,帮助开发者在开发过程中更好地理解和优化代码。 9. **wicket-guice.jar**:如果项目中使用了Google Guice作为依赖注入框架,这个jar包...

    wicket开发指南 pdf

    Wicket 支持模板语言(如Freemarker或Velocity),允许开发者使用模板文件来设计页面布局。同时,Wicket还支持主题机制,可以方便地切换和定制页面样式。 **九、调试与性能优化** Wicket 提供了丰富的调试工具,如...

    apache-wicket-7

    在“apache-wicket-7”这个主题中,我们主要关注的是Wicket框架的第七个主要版本,即7.0.0-M3。这个版本是一个里程碑式的预发布版,通常包含了新特性和改进,为最终的稳定版本做准备。 Wicket的核心理念是“组件...

    wicket 官方JAVA教程

    与许多其他Web框架不同,Wicket允许开发者在HTML模板中直接绑定Java对象,实现声明式编程。这样,当页面上的元素与后台数据模型发生变化时,Wicket会自动更新页面,无需手动编写事件处理代码。 3. **状态管理** ...

    Wicket 8.X开发文档(中文翻译+英文原版)

    5. Wicket作为页面布局管理器 5.1。页眉,页脚,左侧菜单,内容等... 5.2。这是继承! 5.3。划分et impera! 5.4。使用wicket标记继承:扩展标记 5.5。摘要 6.保持对HTML的控制 6.1。隐藏或禁用组件 6.2。修改标签...

    Wicket 入门

    这条命令将基于 `wicket-archetype-quickstart` 模板创建一个名为 `wicket_first` 的项目。 3. **启动 Jetty 服务器** 项目创建完成后,可以在项目目录下运行 Jetty 服务器来测试应用是否正常。通过执行 `mvn ...

    wicket简单实例

    `Include`组件允许你在Wicket页面中嵌入其他组件或整个页面,实现页面的模块化和重用。 7. **Wicket_border**: 边框组件(Border)是Wicket的一个强大特性,它可以作为一个容器,包含其他组件,并提供统一的布局...

    wicket的helloworld

    在Wicket中,组件是构建Web页面的基本单元,可以是HTML元素,如按钮、文本框,也可以是更复杂的组合。这些组件与Java对象直接绑定,提供了强大的数据绑定和状态管理能力。Wicket的1.4版本是一个稳定且广泛使用的版本...

    wicket7教程

    在页面标记方面,Wicket使用了自己的标记语言,特别是wicket:extend标签,它允许页面继承其他页面的标记,从而使得页面的组织更为清晰和有序。 在控制HTML方面,Wicket提供了多种机制,如隐藏或禁用组件、修改标签...

    wicket相关书籍

    此外,书中可能还会包含实际项目开发的经验分享,帮助读者在实际工作环境中更好地应用 Wicket。 最后,"Wicket In Action" 是另一本深入 Wicket 的经典书籍。它详细阐述了 Wicket 的设计理念,包括其无状态的服务器...

    wicket国际化例子

    在本文中,我们将深入探讨Wicket框架中的国际化(i18n)实现,以及如何使用`wicket:message`和`StringResourceModel`等工具来读取`.properties`资源文件。Wicket是一个流行的Java web应用程序框架,它提供了强大的...

    wicket 基础知识培训

    Wicket的组件模型使得UI元素与后台数据直接绑定,减少了模板语言的使用,提高了代码的可读性和可维护性。同时,Wicket的页面状态是在服务器端管理的,这意味着即使页面有复杂的交互,也可以保持轻量级的HTTP通信。 ...

    wicket文档

    用户发送请求到服务器后,Wicket会根据请求的URL找到对应的页面组件,然后渲染页面并将结果返回给客户端。 #### 5. Wicket基本控件 **5.1 信息输出控件** - **5.1.1 单行信息输出控件Label** 用于显示简单的文本...

Global site tag (gtag.js) - Google Analytics