Java EE Web项目和字符编码

时间:2011-01-27 17:35:02

标签: encoding jdbc java-ee glassfish diacritics

我们构建了一个java ee web项目并使用jdbc来存储我们的数据。 问题是德国的'Umlaute'像äöü一样正在使用并正确存储在mysql数据库中。我们不知道为什么,但在浏览器中这些字符被破坏,显示奇怪的东西,如

ö�

代替。 我已经尝试过设置jdbc连接的编码,如下所述:

JDBC character encoding

正确设置了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" />

也不会改变任何东西

1 个答案:

答案 0 :(得分:1)

  

“我们不知道为什么,但在浏览器中这些字符已被破坏”

嗯,这是第一件要发现的事情。您应该在每个阶段跟踪您的数据:

  • 当你从数据库中取出它(带有记录)
  • 将其注入页面(带日志记录)
  • 在线上(通过Wireshark

当您记录时,不要只记录字符串:将组成字符串的Unicode字符记录为整数。只需将字符串中的每个字符转换为整数并记录即可。这是原始的,但它会告诉你你需要知道什么。

当你在线上看时,你当然会看到 bytes 而不是字符。您应该计算出您所选择的编码所需的字节数,并根据网络中的实际内容检查这些字节。

您已经在HTML中指定了编码 - 但是您是否告诉过您在ISO Latin 1中生成您想要的页面?这可能是负责设置内容类型标题执行从文本到字节的实际转换。

此外,你有没有理由使用ISO Latin 1而不是UTF-8?你为什么故意这样限制自己? (ISO Latin 1只能处理Unicode的前256个字符,而不是全部的Unicode字符.UTF-8可以处理所有内容,对ASCII也同样有效。)