当切换编码类型变成奇怪的字符时

时间:2013-02-21 08:40:32

标签: html jsf jsf-2

我在我的网页中使用&nbsp,当在不同的编码之间切换时,它变得奇怪,从下面的屏幕截图中可以看到,它变成中文字符,使用其他编码,它变为{{ 1}}角色。对于间距,我不再使用& nbsp了,但是我的JSF页面,我需要一个空标签,所以我使用

accented A

现在我不确定我可以用上面的代码代替什么,以避免在我的页面上出现这些奇怪的字符。请帮忙

enter image description here

3 个答案:

答案 0 :(得分:2)

您需要通过<f:view encoding>控制JSF视图编码,而不是在JSF的控件之外手动设置HttpServletResponse#setCharacterEncoding()。否则,JSF仍然使用默认的UTF-8编码编写响应,并且您基本上只是告诉浏览器它是否采用不同的编码,因此浏览器会错误地解释它。

<f:view encoding="#{bean.encoding}">

至于您所看到的奇怪角色,the &nbsp; exist in UTF-8 of bytes 0xC2 and 0xA0。当这些字节是由接收者(读取:webbrowser)错误地使用ISO-8859-1解释时,那么你确实分别得到its codepage layout字符Â和另一个不间断的空格。当使用KSC5601错误地解释这些字节时,你会得到EUC-KR codepage layout字符

答案 1 :(得分:1)

对于&nbsp,请使用值&#160;

请参阅HTML ISO-8859-1 Reference

答案 2 :(得分:0)

对于初学者,&nbsp最后应该有一个分号:

&nbsp;

然而,我认为这不会导致这个问题。

是否有理由不能简单地使用“”或将其完全留空?

h:outputLabel value=" "
h:outputLabel value=""

你不应该使用它来造型。相反,你可以简单地说:

button.myCancelButton { margin-left:40px; }
radio.myColumnsRadio { margin-left:40px; }

此外,如果您希望您的单选按钮在它们之间具有相等的间距,您可以将它们包装在具有固定宽度的容器中,或者将它们放在表格中:

span.myRadioContainer { width:100px; display:inline-block; }

或(HTML解决方案,不确定JSF如何工作):

<table>
    <tbody>
        <tr>
            <td><input type="radio"/></td>
            <td><input type="radio"/></td>
        </tr>
        <tr>
            <td><input type="radio"/></td>
            ...
        </tr>
    </tbody>
</table>

JSFiddle example