我有一个字符串'Montaño',我将它用作Java Map 中的键。但是当我试图检索这个键的值时。它给出了空值。
知道这里有什么问题吗?
已编辑:我从 DB 获得的值显示在日志 Monta�o 中并用作键。但是当我从其他一些参数(也显示来自 db 的名称)中读取相同的名称时,它显示为 Montaño。我确信'�'是ñ。那么,在将其设置为 map 中的 key 之前我应该做什么。这样我就可以正确检索值
我有一个字符串'Montaño',我将它用作Java Map 中的键。但是当我试图检索这个键的值时。它给出了空值。
知道这里有什么问题吗?
已编辑:我从 DB 获得的值显示在日志 Monta�o 中并用作键。但是当我从其他一些参数(也显示来自 db 的名称)中读取相同的名称时,它显示为 Montaño。我确信'�'是ñ。那么,在将其设置为 map 中的 key 之前我应该做什么。这样我就可以正确检索值
您从数据库中获得的“替换字符”不是 ñ,它是一个特殊字符,用于表示无法正确解码的字符。您应该修复您的数据库,以便它始终返回 Montaño。
问题可能在于您如何连接到数据库,而不是单个记录。您可能需要在连接字符串中设置连接的编码,或者在获取连接后设置连接的属性。您没有说您使用哪个数据库,所以我不能更详细,请查看您的数据库的手册以获取连接选项。
由于我无权访问服务器,也无权访问数据库。我得到的记录不是直接来自数据库。我正在通过 java API 获取所有记录。所以,我终于做了一个解决方法,使用该对象的实例(表示记录)作为映射键,而不是使用名称作为键。这样我的问题就解决了。
谢谢大家的关心。你的建议给了我一些好方法,我会在我的最后做。
您的问题在其他地方,而不是在地图中。试试这个测试
HashMap m = new HashMap();
m.put("Montaño", "Montaño");
System.out.println(m.get("Montaño"));
输出
Montaño
我试过了
String val = "Montaño";
Map<String, String> map = new HashMap<String, String>();
map.put(val, "test");
System.out.println(map.get(val));
并根据需要输出:
test
因此,您尝试获取元素的字符串可能存在问题。检查两个字符串是否相同。
确保您的表格列接受特定的字符编码,例如 UTF-8。
使用以下标志连接到数据库:
useUnicode=true;characterEncoding=UTF-8
我认为您的数据库已正确编码。尝试-Dfile.encoding=UTF-8
在 JVM 启动时传递。如果它是一个独立程序,请像java -Dfile.encoding=UTF-8 … com.packages.YourMainClass
. 如果它是一个 Web 应用程序,请将其添加到您的服务器启动脚本中。