我们构建了一个java ee web项目并使用jdbc来存储我们的数据。 问题是德国的'Umlaute'像äöü一样正在使用并正确存储在mysql数据库中。我们不知道为什么,但在浏览器中这些字符被破坏,显示奇怪的东西,如
ö�
代替。 我已经尝试过设置jdbc连接的编码,如下所述:
正确设置了html页面的编码:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
任何想法如何解决?
更新
connection.prepareStatement("SET CHARACTER SET utf8").execute();
不会让变音符号起作用。 将元标记更改为
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
也不会改变任何东西
答案 0 :(得分:1)
“我们不知道为什么,但在浏览器中这些字符已被破坏”
嗯,这是第一件要发现的事情。您应该在每个阶段跟踪您的数据:
当您记录时,不要只记录字符串:将组成字符串的Unicode字符记录为整数。只需将字符串中的每个字符转换为整数并记录即可。这是原始的,但它会告诉你你需要知道什么。
当你在线上看时,你当然会看到 bytes 而不是字符。您应该计算出您所选择的编码所需的字节数,并根据网络中的实际内容检查这些字节。
您已经在HTML中指定了编码 - 但是您是否告诉过您在ISO Latin 1中生成您想要的页面?这可能是负责设置内容类型标题和执行从文本到字节的实际转换。
此外,你有没有理由使用ISO Latin 1而不是UTF-8?你为什么故意这样限制自己? (ISO Latin 1只能处理Unicode的前256个字符,而不是全部的Unicode字符.UTF-8可以处理所有内容,对ASCII也同样有效。)