2

我有一个字符串'Montaño',我将它用作Java Map 中的键。但是当我试图检索这个键的值时。它给出了空值。

知道这里有什么问题吗?

已编辑:我从 DB 获得的值显示在日志 Monta�o 中并用作键。但是当我从其他一些参数(也显示来自 db 的名称)中读取相同的名称时,它显示为 Montaño。我确信'�'是ñ。那么,在将其设置为 map 中的 key 之前我应该​​做什么。这样我就可以正确检索值

4

7 回答 7

2

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

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

于 2013-07-12T07:36:17.030 回答
0

由于我无权访问服务器,也无权访问数据库。我得到的记录不是直接来自数据库。我正在通过 java API 获取所有记录。所以,我终于做了一个解决方法,使用该对象的实例(表示记录)作为映射键,而不是使用名称作为键。这样我的问题就解决了。

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

于 2013-07-12T09:13:32.043 回答
0

您的问题在其他地方,而不是在地图中。试试这个测试

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

输出

Montaño
于 2013-07-12T07:26:31.567 回答
0

我试过了

String val = "Montaño";

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

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

并根据需要输出:

test

因此,您尝试获取元素的字符串可能存在问题。检查两个字符串是否相同。

于 2013-07-12T07:26:46.430 回答
0

确保您的表格列接受特定的字符编码,例如 UTF-8。

使用以下标志连接到数据库:

 useUnicode=true;characterEncoding=UTF-8
于 2013-07-12T08:17:15.810 回答
0
于 2013-07-12T08:27:06.220 回答
0

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

于 2013-07-12T08:30:35.223 回答