2013-07-12 25 views
1

我有一个字符串'Montaño',我将它用作java Map中的键。但是当我试图检索这个键的值时。它给出null。在Java中使用非Ascii字符串作为键值时没有值

任何想法这里有什么不对?

编辑:我从数据库中获取的值显示在日志Monta o中,并用作Key。但是当我从一些其他参数(也显示来自数据库的名称)读取相同的名称时,它显示为Montaño。我肯定这个' '是ñ。 那么,在将它设置为地图中的关键之前,我应该做些什么。以便我可以正确检索该值

+3

你能告诉我们的代码,因为它为我工作得很好...... – LaurentG

回答

0

我试图

String val = "Montaño"; 

Map<String, String> map = new HashMap<String, String>(); 
map.put(val, "test"); 

System.out.println(map.get(val)); 

和输出根据需要:

test 

因此可能问题是你想字符串获取元素。检查两个字符串是否相同。

0

您的问题在其他地方,而不是在地图中。你可以做个试验

HashMap m = new HashMap(); 
    m.put("Montaño", "Montaño"); 
    System.out.println(m.get("Montaño")); 

输出

Montaño 
2

从数据库中获得的“替换字符”不是 - ,它是一个特殊字符,用于表示无法正确解码的字符。您应该修复您的数据库,以便它始终返回Montaño。

问题可能在于如何连接到数据库,而不是单个记录。您可能需要在连接字符串中设置连接的编码,或者在获取连接后设置连接的属性。您不会说您使用哪个数据库,因此我不能更详细地查看您的数据库的手册以了解连接选项。

+0

那么,当显示与相同的字符浏览器相同的记录。它显示为 - 。所以,我不认为这可能是问题。但我一定会检查。谢谢 –

0

确保你的表的列接受特定的字符编码,比如说UTF-8。

连接到数据库,使用下面的标志:

useUnicode=true;characterEncoding=UTF-8 
0

这显然是一个编码问题。

ñ字符在UTF-8中用2个字节表示:C3 B1。例如,在ISO-8859-1中,它用单个字节F1表示。您看到字符的事实似乎表明您正在使用UTF-8解释F1。如果您将C3 B1字节解释为ISO-8859,则会看到ñ

如果您肯定将值正确存储在数据库中,请确保您的JVM使用兼容编码(例如ISO-8859-1)。 (即用于Windows的Windows-1252,用于GNU/Linux的UTF-8)。检查你的数据库编码是否兼容,或者为你的JVM指定一个兼容的数据库(UTF总是避免这类问题的好选择)。

0

我认为你的数据库是正确编码的。尝试在JVM启动时通过-Dfile.encoding=UTF-8。如果它是一个独立的程序通过它像java -Dfile.encoding=UTF-8 … com.packages.YourMainClass。如果它是一个Web应用程序,请将其添加到服务器启动脚本中。

0

由于我没有访问到服务器,无论数据库。 我得到的记录不是直接来自数据库。我通过java API获取所有记录。 因此,我最终提出了一种解决方法,将该Object的实例(代表记录)用作映射Key,而不是将名称用作Key。这样我的问题就解决了。

谢谢大家的关心。你的建议给了我一些好的方法,我会在我的最后做。

相关问题