Jsf 请求查询字符串中未正确重新显示Unicode字符
我写了这个小小的JSF页面:Jsf 请求查询字符串中未正确重新显示Unicode字符,jsf,unicode,query-string,Jsf,Unicode,Query String,我写了这个小小的JSF页面: <?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>What's your Name?</title>
</h:head>
<h:body>
<h1>What's your name?</h1>
<h:form>
<p>Name: <h:inputText value="#{nameController.name}" /></p>
<h:commandButton value="Submit" action="#{nameController.process}" />
</h:form>
</h:body>
</html>
而不是
http://localhost:8080/NameThing/name.jsf?name=ëlmer
这是如何造成的,我如何解决它?这是一个字符编码问题。输出是UTF-8编码的,但在某些地方被解释为ISO-8859-1。找出发生这种情况的位置将需要更多信息,例如重定向是如何发生的、响应的编码设置,以及可能的HTTP响应流检查,以确定它在发送之前还是在浏览器接收之后被误解。您忘记显示
process()
方法的代码。原因很可能就在这里。URL只支持ASCII字符,您需要使用IRI来使用未编码的Unicode字符,如您所示。但在URL中,非ASCII字符必须是字符集编码的,比如UTF-8,然后这些八位字节必须是URL编码的%C3%ABlmer
,ISO-8859-1中的url编码为%EBlmer
,等等。
http://localhost:8080/NameThing/name.jsf?name=ëlmer