[英]UTF-8 character encoding is not working on AWS Elasticbeanstalk Tomcat8 server for spring application
UTF-8 在将服务器移动到 AWS Elasticbeanstalk Tomcat 后,字符编码不适用于我基于 spring 的应用程序 8.
我已经参考了此链接中的步骤。
在下面的事情中,我尝试过:
server.xml
的<Connector>
上设置URIEncoding="UTF-8"
。 参考文献:HTTP 连接器,AJP 连接器。<meta charset="UTF-8" />
更改所有页面以包含字符集名称。CharsetEncodingFilter
中使用了web.xml
。-Dfile.encoding=UTF8
和-Djavax.servlet.request.encoding=UTF8
对于 AWS Elastibeanstalk tomcat JVM arguments,
{
"Namespace": "aws:elasticbeanstalk:container:tomcat:jvmoptions",
"OptionName": "JVM Options",
"Value": "-Dfile.encoding=UTF8 -Djavax.servlet.request.encoding=UTF-8"
}
In web.xml
(这个过滤配置没变,老服务器也一样)
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在.ebextensions/server.xml
<Server port="8005" shutdown="SHUTDOWN">
...
<Service name="Catalina">
...
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3"
URIEncoding="UTF-8"
redirectPort="8443" />
...
</Service>
...
</Server>
在.ebextensions/httpd.conf
AddDefaultCharset utf-8
理想情况下,它应该适用于这些可能的更改,但我得到了俄语、保加利亚语等语言的特殊字符的垃圾字符。
作为目前的解决方法,我在应用程序中需要的任何地方使用以下代码片段:
public String convertToUTF(String value) {
return StringUtils.isEmpty(value) ? value
: new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
}
请建议我在这里缺少任何配置的地方。 提前致谢。
注意:字符编码问题在移动到 AWS Elastibeanstalk Tomcat8 Linux 服务器后出现。
嗨,在控制器类中这样做。
@RequestMapping(value = "/add", method = RequestMethod.POST,produces = "application/json; charset=utf-8")
public @ResponseBody DeclareExamMessage addComplaint(HttpServletRequest request) {
try {
request.setCharacterEncoding("UTF-8");
//map the request object and pass it to sava method
}
}
应用以上更改后,如果它不起作用,请将数据库的uft8字符集更改为utf8mb4
并参考以下网址
https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434
我能够通过将以下内容添加到我的application.properties
资源来解决这个问题
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.