![]() |
1
532
回答我自己作为这个网站的常见问题鼓励它。这对我很有用: 大多数字符是不存在问题的,因为浏览器和Tomcat/Java用于Web应用程序所使用的默认字符集是LATIN 1,即ISO-859-1,“理解”这些字符。 要获得UTF-8在Java+Tomcat + LINUX/WINDOWS + MySQL下工作需要如下: 配置Tomcat的server.xml必须配置连接器使用UTF-8对URL(GET REQUEST)参数进行编码:
关键部分是 uriencoding=“utf-8” 在上面的例子中。Tomcat将所有传入的get参数处理为utf-8编码的Quarante。 因此,当用户将以下内容写入浏览器的地址栏时:
字符gaw被处理为utf-8,并被编码为(通常由浏览器在到达服务器之前)as %D0%B6 . Post请求不受此影响。 字符滤波器然后是强制Java WebApp处理UTF-8编码的所有请求和响应的时候了。这要求我们定义如下字符集过滤器:
这个过滤器确保如果浏览器没有设置请求中使用的编码,那么它被设置为UTF-8。 这个过滤器所做的另一件事是设置默认的响应编码,即返回的HTML/无论是什么。另一种方法是在应用程序的每个控制器中设置响应编码等。 必须将此筛选器添加到 Web.XML 或webapp的部署描述符:
有关制作此过滤器的说明,请参见 tomcat wiki ( http://wiki.apache.org/tomcat/Tomcat/UTF-8 ) JSP页面编码在你 Web.XML ,添加以下内容:
或者,webapp的所有jsp页面都需要在顶部放置以下内容:
如果使用了具有不同JSP片段的某种布局,那么在 全部的 他们当中。 HTML元标签JSP页面编码告诉JVM以正确的编码处理JSP页面中的字符。 然后是时候告诉浏览器HTML页面的编码方式: 这是通过webapp生成的每个xhtml页面顶部的以下内容完成的:
JDBC连接使用数据库时,必须定义连接使用UTF-8编码。这是在 上下文XML 或者JDBC连接定义如下:
MySQL数据库和表使用的数据库必须使用UTF-8编码。这是通过以下方式创建数据库来实现的:
然后,所有表也需要使用UTF-8:
关键部分是 字符集= UTF8 . MySQL服务器配置还必须配置mysql serveri。通常在Windows中通过修改 米尼 -通过配置 肌动蛋白 -文件。 在这些文件中,应该定义所有连接到服务器的客户机都使用utf8作为默认字符集,并且服务器使用的默认字符集也是utf8。
MySQL过程和功能这些还需要定义字符集。例如:
GET请求:Latin1和UTF-8如果在tomcat的server.xml中定义了get请求参数并将其编码为utf-8,那么将正确处理以下get请求:
因为ASCII字符的编码方式与Latin1和UTF-8相同,所以正确处理字符串“petteri”。 在拉丁语1中,西里尔文字符“霏”根本不被理解。因为指示Tomcat将请求参数作为utf-8处理,所以它将该字符正确编码为 %D0%B6 . 如果和当浏览器被指示以UTF-8编码(带有请求头和HTML元标记)读取页面时,至少该时期的Firefox 2/3和其他浏览器都将字符本身编码为 %D0%B6 . 最终结果是找到了所有名为“petteri”的用户,也找到了所有名为“wang”的用户。 但是,你觉得呢?HTTP规范定义默认情况下,URL编码为Latin1。这将导致firefox2、firefox3等编码以下内容
到编码版本
拉丁语1中的角色 腐殖质 编码为 %E4 . 即使页面/请求/所有内容都定义为使用UTF-8 . _的UTF-8编码版本是 %C3%A4 这样做的结果是,webapp很难正确处理来自get请求的请求参数,因为有些字符是用Latin1编码的,其他字符是用utf-8编码的。 注意:如果页面被定义为UTF-8,则POST请求的工作方式是浏览器将表单中的所有请求参数完全编码为UTF-8。 读物非常感谢以下作者为我的问题提供了答案:
重要注意事项
mysql
支持
Basic Multilingual Plane
使用3字节的UTF-8字符。如果您需要超出这个范围(某些字母表需要超过3字节的UTF-8),那么您要么需要使用
带阿帕奇的汤姆猫还有一件事,如果您使用的是Apache+Tomcat+Mod_jk连接器,那么您还需要进行以下更改:
|
![]() |
2
12
我认为你在自己的回答中很好地总结了这一点。 在utf-8-ing过程中(?)从端到端,您可能还希望确保Java本身使用UTF-8。使用-dfile.encoding=utf-8作为jvm的参数(可以在catalina.bat中配置)。 |
![]() |
3
10
添加到
kosoant's answer
,如果您使用的是Spring,而不是编写自己的servlet过滤器,则可以使用类
|
![]() |
4
2
我还想从 here 这部分解决了我的UTF问题:
|
![]() |
5
1
当我们想用Java访问它们时,这是用于MySQL表中的希腊编码。 使用jboss连接池(mysql ds.xml)中的以下连接设置
如果不想将其放入JNDI连接池中,可以将其配置为JDBC URL,如下一行所示:
对我和尼克来说,我们永远不会忘记它,也不会再浪费时间…… |
![]() |
6
1
回答得很详细。只想再增加一件事,这肯定会帮助其他人看到在URL上的UTF-8编码在行动中。 按照下面的步骤在Firefox中启用URL的UTF-8编码。
URL上的UTF-8编码在IE6/7/8和Chrome中默认工作。 |
![]() |
7
0
我有一个类似的问题,但是,在一个文件的文件名中,我用ApacheCommons进行压缩。 所以,我用这个命令解决了这个问题:
它对我很管用。希望它能帮助任何人;) |
![]() |
8
0
对于显示来自消息束的Unicode字符的情况,我不需要应用“JSP页面编码”部分来在JSP页面上显示Unicode。我只需要“charsetfilter”部分。 |
![]() |
9
0
还没有提到的另一点涉及使用Ajax工作的Java servlet。在某些情况下,网页会从用户那里获取utf-8文本,并将其发送到一个javascript文件,该文件包含在发送到servlet的URI中。servlet查询数据库,捕获结果并将其作为XML返回到javascript文件,该文件对其进行格式化,并将格式化的响应插入到原始网页中。 在一个Web应用程序中,我遵循了早期的Ajax手册中关于在构建URI时包装JavaScript的说明。书中的示例使用了escape()方法,我发现(硬方法)是错误的。对于UTF-8,必须使用EncodeUriComponent()。 现在似乎很少有人使用自己的Ajax,但我想我还是添加一点。 |
![]() |
10
0
关于
有一个内置的
也不需要设置
|
![]() |
11
0
有时您可以通过MySQL管理员向导解决问题。在
并设置DEF。字符集:UTF8 也许这个配置需要重启mysql。 |
![]() |
12
0
以前的回答对我的问题不起作用。它只是在生产中,与Tomcat和Apache mod_proxy_ajp。邮件正文是否丢失了非ASCII字符? 最后一个问题是jvm default charset(us-ascii在默认设置中:charset fset=charset.default charset();) 因此,解决方案是使用修改器运行tomcat server,以使用utf-8作为默认字符集运行jvm:
(将此行添加到catalina.sh并服务tomcat restart) 可能还必须更改Linux系统变量(编辑~/.bashrc和~/.profile以获取永久更改,请参见 https://perlgeek.de/en/article/set-up-a-clean-utf8-environment )
|
![]() |
13
-1
在连接池(MySQL DS.xml)中指定的情况下,在Java代码中,可以按如下方式打开连接:
|