我在facelet页面中有以下代码:
<h:inputNumber value="bean.property">
<f:convertNumber type="currency" />
</h:inputNumber
转换器是因为输入字段中可能存在一种默认值,它来自bean属性。一切都正确呈现。输入字段内的值使用“€”字符呈现(例如“1.453€”。
当我提交表单时出现错误:
"nameOfInputField" konnte nicht als ein Geldbetrag erkannt werden '304,00 â¬'
在英语中它有点像:
"nameOfInputField" could not be regognized as an amount of money '304,00 â¬'
请查看“€”字符。它似乎被打印为“â”。虽然在提交表单之前它已正确呈现,但现在它在错误消息内部和输入字段内部看起来像“â”。
所有页面均以UTF-8编码。
出现此错误的原因是什么? 怎么解决它?
提前致谢
答案 0 :(得分:1)
â¬
这对于使用ISO-8859-1错误解码的原始UTF-8来源来说是典型的。这是一个小片段,演示了:
System.out.println(new String("€".getBytes("UTF-8"), "ISO-8859-1"));
所有页面均以UTF-8编码。
您可能正在谈论响应编码。您还需要设置请求编码。
要设置GET
请求的编码(基本上是:URI编码),您需要查阅appserver特定的文档。由于目前还不清楚你正在使用哪一个,这里有一个Tomcat目标示例:<Connector URIEncoding="UTF-8" />
。要设置POST
个请求的编码,您需要创建一个简单的过滤器request.setCharacterEncoding("UTF-8")
,如果它是null
。可以在this article中找到更多背景信息和提示。
答案 1 :(得分:1)
将它放在facelets页面上:
<?xml version="1.0" encoding="UTF-8" ?>
它将指示facelets解析器。