2011-01-27 60 views
0

我们构建了一个java ee web项目并使用jdbc存储我们的数据。 问题是,德国的'Umlaute'像äöü正在使用并正确存储在mysql数据库中。我们不知道为什么,但在浏览器中这些字符被打破,显示像Java EE Web项目和字符编码

ö� 

,而不是怪异的东西。 我已经尝试过类似的设置在这个问题上所描述的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

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

那么,这是首先要弄清楚的。你应该在每一个阶段跟踪你的数据:

  • 当你取出来的数据库(日志记录)的
  • 当你把它注射到页面(伐木)
  • 在电线(通过Wireshark

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

当你在电线上看,当然,你会看到字节,而不是像这样的字符。您应该计算出您所选编码的字节数,然后检查这些数据是否与实际通过网络传输的数据相对应。

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

此外,是否有任何理由你为什么使用ISO拉丁文1而不是UTF-8?你为什么要故意限制自己? (ISO Latin 1只能处理Unicode的前256个字符,而不是Unicode字符的全部范围,UTF-8可以处理所有事情,并且对于ASCII码也是一样高效。)

+0

那么,我会尝试与伐木。我使用标准的servlet和一些标签。 – phineas 2011-01-27 17:41:07