这是场景-
- DB2数据库位于主机系统(z / OS)上 - Web服务器在USS上运行(z / OS的Unix部分),使用Spring JDBC运行Java代码 - 我们测试的浏览器和客户端程序在Windows 7上运行(默认编码为windows-1252)
我们有一个包含西班牙字符(ú)的字符串,它使用Spring的JDBCTemplate存储在数据库中,因此实际上是JDBC。
- 使用JDBC客户端(Java编写的Squirrel)查询时,它显示为其他内容(ú)。 - 当用示例JDBC程序查询并将结果打印为字符串时,它会显示为其他内容(ú)。 - 当用UTF-8编码的字符串[new String(str,“UTF-8”)]查询并将结果打印出来时,它会正确地显示(ú)。 - 使用-Dfile.encoding = utf-8以UTF-8编码启动JVM时,在上述两种情况下结果都会打印为其他内容(ú)。 - 运行应用程序前端的浏览器也将其显示为ú,尽管HTML的内容头设置为UTF-8。
在这个阶段我有点困惑,有以下问题-
- 如果特定使用UTF-8格式打印字符串可以正常工作,那么为什么使用UTF-8编码启动JVM时无法正常工作? - 实际上可能发生问题的层是数据库还是JVM? - 我应该在应用程序级别解决问题,而不是在列级别解决问题?
有任何指针都将非常有帮助。
- DB2数据库位于主机系统(z / OS)上 - Web服务器在USS上运行(z / OS的Unix部分),使用Spring JDBC运行Java代码 - 我们测试的浏览器和客户端程序在Windows 7上运行(默认编码为windows-1252)
我们有一个包含西班牙字符(ú)的字符串,它使用Spring的JDBCTemplate存储在数据库中,因此实际上是JDBC。
- 使用JDBC客户端(Java编写的Squirrel)查询时,它显示为其他内容(ú)。 - 当用示例JDBC程序查询并将结果打印为字符串时,它会显示为其他内容(ú)。 - 当用UTF-8编码的字符串[new String(str,“UTF-8”)]查询并将结果打印出来时,它会正确地显示(ú)。 - 使用-Dfile.encoding = utf-8以UTF-8编码启动JVM时,在上述两种情况下结果都会打印为其他内容(ú)。 - 运行应用程序前端的浏览器也将其显示为ú,尽管HTML的内容头设置为UTF-8。
在这个阶段我有点困惑,有以下问题-
- 如果特定使用UTF-8格式打印字符串可以正常工作,那么为什么使用UTF-8编码启动JVM时无法正常工作? - 实际上可能发生问题的层是数据库还是JVM? - 我应该在应用程序级别解决问题,而不是在列级别解决问题?
有任何指针都将非常有帮助。
str.getBytes()
。除非你想让事情以可怕和神秘的方式崩溃,否则永远不要忘记指定字符编码。 - David Conrad