Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法从查询字符串中读取重音字符_Java_Jsf 2_Character Encoding_Query String_Viewparams - Fatal编程技术网

Java Can';无法从查询字符串中读取重音字符

Java Can';无法从查询字符串中读取重音字符,java,jsf-2,character-encoding,query-string,viewparams,Java,Jsf 2,Character Encoding,Query String,Viewparams,在的帮助下,我将queryString中的值设置到managedBean的属性中。如果我打印属性的值,它对普通字符正常工作。 但当queryString包含重音字符时,在将值设置到managedBean的属性中后,如果我打印该属性的值,则重音字符 显示不正确 .xhtml代码片段如下所示: <f:metadata> <f:viewParam id="requestString" name="requestString" value="#{aproveOrDenyControll

的帮助下,我将queryString中的值设置到managedBean的属性中。如果我打印属性的值,它对普通字符正常工作。 但当queryString包含重音字符时,在将值设置到managedBean的属性中后,如果我打印该属性的值,则重音字符 显示不正确

.xhtml代码片段如下所示:

<f:metadata>
<f:viewParam id="requestString" name="requestString" value="#{aproveOrDenyController.requestString}" />
</f:metadata>
@ManagedBean(name = "aproveOrDenyController")
@ViewScoped
public class AproveOrDenyController extends BaseWebController implements Serializable 
{
private String requestString;


public final String getRequestString() {
    return requestString;
}
public final void setRequestString(String requestString) {
    this.requestString = requestString;
    System.out.println(this.requestString);
}
}
如果查询字符串包含…&requestString=abcdefgh&。。。。。 然后正确打印
abcdefgh
。 但是如果查询字符串包含…&requestString=SociétéGéniale&。。 然后它打印出SociétéGéniale。 但是我想要
兴业银行
。
任何指针都会对我很有帮助

编辑-1 生成的错误:

19:52:49,594 ERROR [org.jboss.as.server] JBAS015956: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: JBAS014676: Failed to parse configuration
at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:141) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.ServerService.boot(ServerService.java:266) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:155) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_10]
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,5]
Message: JBAS014789: Unexpected element '{urn:jboss:domain:1.2}extensions' encountered
at org.jboss.as.controller.parsing.ParseUtils.unexpectedElement(ParseUtils.java:85) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.parsing.StandaloneXml.readServerElement_1_1(StandaloneXml.java:351) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:127) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:100) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:110) [staxmapper-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69) [staxmapper-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:133) [jboss-as-controller-7.1.1.Final.jar:7.1.1.Final]
... 3 more

URI查询字符串的解码由servletcontainer(Tomcat、JBoss、Glassfish等)管理。这通常默认为ISO-8859-1。您需要将servletcontainer中的查询字符串解码字符集配置为与JSF/Facelets用于编码响应和POST请求的字符集相同,默认情况下为UTF-8。在您的例子中,查询字符串编码显然使用默认的ISO-8859-1。
é
字符以两个字节的形式存在
0xC3
0xA9
,每个字节依次表示字符
Ã
,正是您看到的字符。这证实了ISO-8859-1代替UTF-8被错误使用

在使用JBoss As时,需要在JBoss的
/standalone/configuration/standalone.xml的
之间添加以下条目:


这将指示JBoss使用
ServletRequest#getCharacterEncoding()
来解码查询字符串,而不是ISO-8859-1的默认编码。如果这仍然不起作用(在使用PrimeFaces时可能会发生),那么除了上面的配置条目之外,还需要使用servlet过滤器将字符编码显式设置为UTF-8。这一部分在的解决方案1中得到了回答

另一个可能的原因是,
System.out.println()
结束的输出目标没有使用UTF-8显示打印的字符。这与JSF和servletcontainer完全无关。您也没有告诉任何有关运行
System.out.println()
的上下文的信息,因此在这里也很难给出合适的答案。但如果它是例如Eclipse,那么您可以通过将Window>Preferences>General>Workspace>Text File Encoding设置为UTF-8来配置它

另见:

在前面的答案的集成中,您可以尝试添加:



到standalone.xml配置文件。

在调试和检查
requestString
时,值是否仍然乱码?我怀疑控制台字符集可能在这里玩破坏游戏。感谢@BalusC的回复:我已尝试将给定的
配置添加到JBoss的standalone.xml文件中。但在服务器启动时会产生错误。如果您详细说明错误,而不是将其过度概括为“错误”,这会很有帮助。错误本身即包含了问题的答案。未能解释错误并不意味着应该忽略错误。您需要将
置于
之间。问题仍然存在。输出
20:04:46685信息[stdout](http-localhost-127.0.0.1-8080-1):以下内容:以下内容:以下内容:。