我有一个字符串'Montaño',我在java Map中使用它作为键。但是当我试图检索此密钥的值时。它给出了null。
任何想法在这里有什么问题?
EDITED:我从DB获得的值显示在Monta o日志中并用作Key。但是当我从其他一些参数(也显示来自db的名称)中读取相同的名称时,它显示为Montaño。我确信这个' '是ñ。 那么,在将其设置为地图中的键之前,我该怎么做。这样我就可以正确地检索值
答案 0 :(得分:2)
从数据库中获取的“替换字符”不是ñ,它是一个特殊字符,用于表示无法正确解码的字符。你应该修复你的数据库,以便它总是返回Montaño。
问题可能在于您如何连接到数据库,而不是单个记录。您可能需要在连接字符串中设置连接的编码,或者在获取连接后在连接上设置属性。您没有说明您使用的是哪个数据库,因此我无法更详细,请查看数据库手册以了解连接选项。
答案 1 :(得分:0)
你的问题出在其他地方,而不是Map。试试这个测试
HashMap m = new HashMap();
m.put("Montaño", "Montaño");
System.out.println(m.get("Montaño"));
输出
Montaño
答案 2 :(得分:0)
我试过
String val = "Montaño";
Map<String, String> map = new HashMap<String, String>();
map.put(val, "test");
System.out.println(map.get(val));
根据需要输出:
test
因此,问题可能在于您尝试获取元素的字符串。检查字符串是否相同。
答案 3 :(得分:0)
确保您的表格列接受特定字符编码,例如UTF-8。
使用以下标志连接到数据库:
useUnicode=true;characterEncoding=UTF-8
答案 4 :(得分:0)
这显然是编码问题。
ñ
字符在UTF-8中以2个字节表示:C3 B1
。例如,在ISO-8859-1中,它用单个字节F1
表示。你看到一个�
字符的事实似乎表明你正在用UTF-8解释F1
。如果您将C3 B1
字节解释为ISO-8859,则会看到ñ
。
如果您肯定该值正确存储在数据库中,请确保您的JVM使用兼容的编码(例如,ISO-8859-1)。
The JVM will use by default the platform's encoding,(Windows为Windows-1252,GNU / Linux为UTF-8)。检查您的数据库编码是否兼容,或为您的JVM指定兼容的(UTF始终是避免这类问题的好选择)。
答案 5 :(得分:0)
我认为您的数据库已正确编码。尝试在JVM开始时传递-Dfile.encoding=UTF-8
。如果是独立程序,则将其传递给java -Dfile.encoding=UTF-8 … com.packages.YourMainClass
。如果是Web应用程序,请将其添加到服务器启动脚本中。
答案 6 :(得分:0)
由于我无法访问Server,因此无法访问数据库。 我得到的记录不是直接来自数据库。我通过java API获取所有记录。 所以,我最终做了一个解决方法,使用该Object的实例(表示记录)作为映射Key,而不是使用name作为Key。这样我的问题就解决了。
谢谢大家的关注。你的建议给了我一些很好的方法,我将在最后完成。