我有一个使用UTF-8 Unicode字符集的MySql数据库。在我的JSP中,我有:
<meta http-equiv="Content-Type" content="text/html" charset="ISO-8859-1">
它会正确插入数据库中的西班牙语重音符号。但是,当我使用:
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
它会插入GarcÃa而不是García
你们知道为什么UTF-8不会插入重音符号吗?
答案 0 :(得分:1)
我不了解JSP,但这经常与数据库连接如何从数据库中读取数据有关。在PHP中,为了确保您使用utf-8编码读取表(或数据库),您应该声明连接的字符集:
if(!$conexion->set_charset("utf8")) {
$errsql['juego_de_caracteres']="Error al conectar al servidor mysql : ".mysqli_connect_error();
所以我想你可以在Java中做类似的事情。
您可以在Web中阅读有关字符编码的信息。这个链接:http://www.joelonsoftware.com/articles/Unicode.html我觉得很有用。
此外,如果你的设置不正确,它的输出可能是多么不可预测的,因为我有时会看到在显示ISO-8859-1的Windows字符中,但它们肯定不会在所有系统中都显示出来。
答案 1 :(得分:0)
由于我使用Spring,我使用CharacterEncodingFilter解决了我的问题。这很有用,因为即使在HTML页面或表单
中指定,当前浏览器通常也不会设置字符编码答案 2 :(得分:0)
您需要设置三件事
(1)告诉servlet引擎在源文件中使用了什么字符编码
(2)告诉servlet引擎你要输出什么字符集
(3)告诉接收者该流的字符编码是什么。
元标记仅完成最后一个,但您实际上可能不会发送以该编码格式化的输出流。
使用它来告诉servlet引擎如何读取源文件,并且需要输入源文件编码的实际字符集。只有在使用UTF-8时它才是UTF-8编辑。它可能是ISO-8859-1,如果你没有花费一些力气使它成为UTF-8:
<%@page contentType="text/html;charset=???????"%>
并使用它来告诉它如何输出流:
response.setCharacterEncoding("text/html; charset=UTF-8")
在您的情况下,由于您知道数据库中的数据是以UTF-8编码的,因此可能是最后一个设置可以解决问题。