字符串等于在明显相等的字符串中打印false(编码)

时间:2014-07-03 16:36:38

标签: html string jsf jsf-2

programacao.getNome()内部有字符串457P D (0) NOVA PROG 并且在字符串nome内部有457P D (0)    NOVA PROG

当我运行时,它是具有不同编码的相同字符串 programacao.getNome().equals(nome))结果为false

programacao.getNome().getBytes() 结果为

[52, 53, 55, 80, 32, 68, 32, 40, 48, 41, 32, 32, 32, 32, 78, 79, 86, 65, 32, 80, 82, 79, 71]和nome.getBytes的结果是

[52, 53, 55, 80, -62, -96, 68, -62, -96, 40, 48, 41, -62, -96, -62, -96, -62, -96, -62, -96, 78, 79, 86, 65, -62, -96, 80, 82, 79, 71]

不同之处在于programação.getNome()来自数据库中的一个字段(mysql),参数nome来自JSF中的xhtml页面,通过类中的方法getAsObject实现接口Converter

我们必须先将" "替换为&nbsp,然后再将其发送到selectOneMenu,以便显示空格,但在下拉列表中选择项目时,字符串会以这种方式进入托管bean。

xhtml的顶部我们放encoding="ISO-8859-1",所以也许这就是问题所在?我应该从哪里开始看?

1 个答案:

答案 0 :(得分:-1)

根据String.equals(java.lang.Object)的定义:

  

将此字符串与指定对象进行比较。当且仅当参数不为null并且是表示与此对象相同的字符序列的String对象时,结果才为真。   http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals%28java.lang.Object%29

我假设你使用的是java.lang.String,所以问题是两个字符序列不相等。

根据java.lang.String文档:

  

String表示UTF-16格式的字符串

所以你的问题是你将两个不同的编码放入一个字符串,最终为UTF-16。在将字符序列放入字符串之前,您需要将字符序列转换为UTF-16。