Jsf 请求查询字符串中未正确重新显示Unicode字符

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="

我写了这个小小的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="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编码的ëlmer将url编码为
%C3%ABlmer
,ISO-8859-1中的url编码为
%EBlmer
,等等。
http://localhost:8080/NameThing/name.jsf?name=ëlmer