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
。
我们必须先将" "
替换为 
,然后再将其发送到selectOneMenu,以便显示空格,但在下拉列表中选择项目时,字符串会以这种方式进入托管bean。
在xhtml
的顶部我们放encoding="ISO-8859-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。