【问题标题】:Not showing ISO-8859-1 characters不显示 ISO-8859-1 字符
【发布时间】:2011-09-05 19:49:10
【问题描述】:

我的 JSP 页面没有显示拉丁字符。美国变成了美国。 我已经把每个 JSP 放在了上面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>`

在 web.xml 之上:

<?xml version="1.0" encoding="ISO-8859-1"?>

还尝试设置与数据库的连接:

jdbc:mysql://localhost:3306/database3?charSet=ISO8859-1

我还在项目的属性上将其配置为 ISO-8859-1,但没有成功,尽管我的数据库表显示拉丁字符很好。

我错过了什么?

我的数据库上的状态是:

C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql.exe  Ver 14.14 Distrib 5.5.15, for Win32 (x86)
Connection id: 6
Current database:       database3
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.5.15 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 12 min 22 sec
Threads: 2  Questions: 102  Slow queries: 0  Opens: 50  Flush tables: 1  Open tables: 27  Queries per second avg: 0.137

我桌子上的状态是:

| Name     | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options | Comment |
+----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| address | InnoDB |      10 | Compact     |    4 |           4096 |       16384 |               0 |        16384 |   4194304 |              5 | 2011-09-07 18:46:49 | NULL        | NULL       | utf8_general_ci |     NULL |                |         |

如您所见,排序规则是utf8_general_ci

【问题讨论】:

  • 您是否包含了元标记?
  • @Daniel:无关紧要,当内容通过 HTTP 提供时会被忽略。
  • 也许问题不在于数据库,而在于 Web 容器?你检查过Tomcat's How to use UTF-8 everywhere - 其他容器会有类似的文档/程序。我倾向于在每个新项目中忘记我的CharacterEncodingFilter
  • 上面可以简单地应用于 ISO-8859-1,但就像 BalusC 说的:Go UTF-8。

标签: mysql jsp character-encoding iso-8859-1


【解决方案1】:

... América 变成 Am?rica ...

... 虽然我的数据库表显示拉丁字符很好 ...

字符在您的数据库表中显示得很好,并且您得到 ? 作为结果,表明您的数据库表实际上以不同的编码存储它,很可能是 UTF -8(这是现在推荐的获得world domination的编码)。

everything 更改为 UTF-8,这个问题应该会消失。这篇针对 Java EE Web 开发者的文章应该给个很好的介绍:Unicode - How to get the characters right?

【讨论】:

  • 我现在已将其更改为 UTF-8,现在 América 在每个浏览器上都变成了 Am,rica
  • 这个逗号对确定问题的原因没有帮助(阅读:查找最初编码的字符集)。您使用的是什么操作系统平台?平台的默认字符集是什么?您是否检查/更改了 MySQL DB 编码?您是否检查/更改了 MySQL 表编码?您是否检查/更改了 JDBC 驱动程序编码?您是否检查/更改了 JSP/Servlet HTTP 响应编码?
  • 是的,我已将所有这些更改为 UTF-8。所有这些都在我的第一条消息中作为 ISO-8859-1,然后我将它们更改为 UTF-8。我已经用?charSet=ISO8859-1 更改了数据库,并且我使用的是 Windows 7 32 位
  • JDBC 驱动程序连接 URL 必须与此稍有不同。检查链接文章的Databases 部分。
  • 抱歉花了这么长时间,但我确保阅读了此处发布的所有教程。最好的解决方案(正如您在上一条消息中指出的那样)是在休眠数据库连接的末尾添加 ?useUnicode=yes&characterEncoding=UTF-8 。它一直给我一个错误,说我应该用 ; 结束 characterEncoding分隔符。我尝试了两种方法,但它们都使我的数据库连接崩溃
【解决方案2】:

BalusC 可能有正确的答案。但是,还要注意现代浏览器将 ISO-8859-1 误解为 Windows 代码页 1252(出于历史原因),并且这两种编码之间存在细微差异。因此,如果您的数据真的是用 ISO-8859-1 编码的,那么您就不走运了——您不能提供这种编码,您需要重新编码您的所有数据(然后你应该转向 UTF-8)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 2011-05-23
相关资源
最近更新 更多