相关疑难解决方法(0)

Spring MVC UTF-8编码

目前我正在尝试使用Spring MVC.在尝试时,我遇到了编码问题.

我想在JSP-Pages上显示UTF-8字符,所以我在我的ModelAndView中添加了一个带有UTF-8字符的字符串.它看起来像这样:

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @RequestMapping(value="/", method=RequestMethod.GET)
    public ModelAndView home() {
        logger.info("Welcome home!");
        return new ModelAndView("home", "utftest", "ölm");
    }

}
Run Code Online (Sandbox Code Playgroud)

在JSP页面上,我只想显示带有UTF-8字符的String,如下所示:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Home</title>
</head>
<body>
    <h1>Hello world!</h1>
    <p><c:out value="ö" /></p>
    <p><c:out value="${utftest}"></c:out></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

结果我得到以下:

Hello world!

ö

??lm
Run Code Online (Sandbox Code Playgroud)

请注意,<c:out value="ö" />显示以下代码时没有编码错误.我还在Springsource Tool Suite中将默认编码设置为UTF-8,但我仍然遇到错误的字符.

编辑:

也许我应该提到我使用的是Mac …

java spring-mvc utf-8 character-encoding

60
推荐指数
7
解决办法
15万
查看次数

为Internet Explorer设置表单提交的字符编码

我有一个包含表单的页面.此页面的内容类型为text/html; charset = utf-8.我需要使用ISO-8859-1字符编码将此表单提交给服务器.这可能是Internet Explorer吗?

将accept-charset属性设置为表单元素,就像这样,适用于Firefox,Opera等,但不适用于IE.

<form accept-charset="ISO-8859-1">
  ...
</form>
Run Code Online (Sandbox Code Playgroud)

编辑:此表单由服务器A创建,并将提交给服务器B.我无法控制服务器B.

如果我将服务器A设置为使用charset ISO-8859-1提供内容,一切正常,但我正在寻找一种方法来使这项工作无需更改服务器A的编码.我有另一个关于在服务器A中设置编码的问题.

html forms encoding internet-explorer iso-8859-1

59
推荐指数
5
解决办法
14万
查看次数

JSP页面中的UTF-8编码

我有一个JSP页面编码的页面ISO-8859-1.这个JSP页面有一个问题答案博客.我希望在Q/A发布期间包含特殊字符.

问题是JSP不支持UTF-8编码,即使我已将其更改ISO-8859-1UTF-8.这些字符(~,%,&,+)正在问题.当我单独或使用任何字符的组合发布这些字符时,它null在数据库中是storinh ,当我在发布应用程序时删除这些字符时它工作正常.

任何人都能提出一些解决方案吗

java jsp utf-8

32
推荐指数
9
解决办法
14万
查看次数

为什么POST不尊重charset,但是AJAX请求呢?tomcat 6

我有一个基于tomcat的应用程序,需要提交一个能够处理utf-8字符的表单.通过ajax提交时,数据从utf-8中的getParameter()正确返回.通过表单发布提交时,数据将从iso-8859-1中的getParameter()返回.

我使用了fiddler,并确定了请求的唯一区别,就是在ajax调用中将charset = utf-8附加到Content-Type头的末尾(正如预期的那样,因为我明确地发送了内容类型).

来自ajax的ContentType:"application/x-www-form-urlencoded; charset = utf-8"

来自表单的ContentType:"application/x-www-form-urlencoded"

我有以下设置:

ajax post(正确输出字符):

$.ajax( {
  type : "POST",
  url : "blah",
  async : false,
  contentType: "application/x-www-form-urlencoded; charset=utf-8",
  data  : data,
  success : function(data) { 
  }
 });
Run Code Online (Sandbox Code Playgroud)

表格帖子(在iso中输出字符)

 <form id="leadform" enctype="application/x-www-form-urlencoded; charset=utf-8" method="post" accept-charset="utf-8" action="{//app/path}">
Run Code Online (Sandbox Code Playgroud)

xml声明:

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

文档类型:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Run Code Online (Sandbox Code Playgroud)

元标记:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Run Code Online (Sandbox Code Playgroud)

jvm参数:

-Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用request.setCharacterEncoding("UTF-8"); 但似乎tomcat只是忽略了它.我没有使用RequestDumper阀门.

根据我的阅读,POST数据编码主要取决于表单所在的页面编码.据我所知,我的页面在utf-8中正确编码.

此页面中的示例JSP正常工作.它只使用setCharacterEncoding("UTF-8"); 并回复您发布的数据. http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

总而言之,post请求不会将charset作为utf-8发送,尽管页面在utf-8中,表单参数指定utf-8,xml声明或其他任何内容.我已经花了三天的时间来完成这项工作,但我的想法已经不多了.谁能帮我?

java ajax tomcat servlets character-encoding

24
推荐指数
1
解决办法
1万
查看次数

使用声明的encoding = utf-8 - Java从xml中删除非UTF-8字符

我必须在Java中处理这种情况:

我从声明为encoding = utf-8的客户端获取XML格式的请求.不幸的是,它可能不包含utf-8字符,并且需要从我这边的xml中删除这些字符(遗留).

让我们考虑这个无效XML包含£(磅)的示例.

1)我得到xml作为带有£的java字符串(我现在没有访问接口,但我可能得到xml作为java字符串).我可以使用replaceAll(£,"")来摆脱这个角色吗?任何潜在的问题?

2)我得到xml作为字节数组 - 在这种情况下如何安全地处理这个操作?

java xml encoding utf-8

17
推荐指数
3
解决办法
5万
查看次数

JDBC MySQL UTF-8字符串写入问题

连接到db:

public DBSource(ConnectionInfo ci) throws
        ClassNotFoundException, InstantiationException,
        IllegalAccessException, SQLException
{
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    String dbPath = String.format(
        "jdbc:mysql://%s:%d/%s?user=%s&password=%s&characterEncoding=utf-8&" + 
        "useUnicode=true", ci.host, ci.port, ci.dbName, ci.user, ci.password);
    conn = java.sql.DriverManager.getConnection(dbPath);
    prepareTables();
}
Run Code Online (Sandbox Code Playgroud)

表创建代码:

private void prepareTables() throws SQLException
{
    java.sql.Statement stat = conn.createStatement();

    String query = "set names utf8";
    stat.execute(query);

    query = "set character set utf8";
    stat.execute(query);

    query = "show variables like '%char%'";
    stat.execute(query);
    java.sql.ResultSet rs = stat.getResultSet();
    while (rs.next())
    {
        String k = rs.getString(1);
        String v = rs.getString(2);
        System.out.println(k + " - " …
Run Code Online (Sandbox Code Playgroud)

java mysql jdbc utf-8

16
推荐指数
2
解决办法
4万
查看次数

Tomcat的字符编码问题

正在进行奇怪的字符编码.我正在使用JSP(JSTL)和Struts与Tomat 6.

我有我的JSP页面编码:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试使用encodeURI传递url时:

<script type="text/javascript">
          $('#mailer_filter').change(function(){
            var val = $(this).val();
            console.log(val);
            console.log(escape(val));
            console.log(encodeURI(val));
            location.href = 'mailList.a?' + encodeURI($(this).val());
          });
        </script>
Run Code Online (Sandbox Code Playgroud)

action(java end)上的参数如下:

Gaz Métro
Run Code Online (Sandbox Code Playgroud)

但是在前端它显示为:

Gaz Métro
Run Code Online (Sandbox Code Playgroud)

这是正确的方法.我能做些什么?

java jsp tomcat jstl tomcat6

16
推荐指数
3
解决办法
5万
查看次数

如何删除不适合MySQL中utf8编码的错误字符?

我有脏数据.有时它包含像字符这样.我使用这些数据来进行查询

WHERE a.address IN ('mydatahere')
Run Code Online (Sandbox Code Playgroud)

对于这个角色我得到了

org.hibernate.exception.GenericJDBCException:操作'IN'的非法混合排序(utf8_bin,IMPLICIT),(utf8mb4_general_ci,COERCIBLE),(utf8mb4_general_ci,COERCIBLE)

如何过滤掉这样的字符?我用的是Java.

谢谢.

java mysql unicode utf-8

16
推荐指数
3
解决办法
5万
查看次数

使用JDBC连接器5.1从Java读取/写入MySQL中的UTF-8数据时出现问题

我有一个场景,有两个MySQL数据库(UTF-8),一个Java代码(一个定时服务),它同步两个数据库(首先读取它们并写入/更新到第二个)和一个允许修改数据加载的Web应用程序第二个数据库.

所有数据库访问都是使用IBATIS进行的(但我发现使用JDBC,PreparedStatements和ResultSets时我遇到了同样的问题)

当我的java代码从第一个数据库中读取数据时,我会获得类似于'ó'必须时的字符'ó'.该数据在没有修改第二数据库的情况下被编辑.

后来,当我在我的Web应用程序中看到加载的数据时,尽管如此,我还是看到了外部字符<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />.

如果我使用...解码数据

new String(data.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)

......我正确地想象了角色(ó).但我不能将此解决方案作为一般规则使用,因为当我使用Web应用程序表单修改数据时,我的第二个数据库中的数据不会以UTF-8更新(尽管数据库是UTF-8且我的连接字符串使用了字符编码, characterSetResults和useUnicode参数).

从我的Java代码中获取以下数据库设置:

character_set_client-->utf8 
character_set_connection-->utf8 
character_set_database-->utf8 
character_set_filesystem-->binary 
character_set_results-->utf8 
character_set_server-->latin1 
character_set_system-->utf8 
character_sets_dir-->/usr/local/mysql51/share/mysql/charsets/ 
Run Code Online (Sandbox Code Playgroud)

character_set_server设置无法更改,我不知道我做错了什么!!

如何使用JDBC connector(mysql-connector-java-5.1.5-bin.jar)从MySQL读取UTF-8数据?

从第一个数据库读取数据或写入第二个数据库是否有问题?

java mysql jdbc utf-8

15
推荐指数
3
解决办法
5万
查看次数

UTF-8 URL解码/编码

我指示我的URL发送类似的Ajax请求:

url += '/' + something + '/' + id;
var response;
$.ajax({
    async : false,
    type: 'DELETE',
    url: url,
 ...
Run Code Online (Sandbox Code Playgroud)

removeId是一个包含UTF-8字符的变量.我将在Java端处理该变量:

@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE)
    public void myMethod(HttpServletResponse response, @PathVariable String id) {
    ...
Run Code Online (Sandbox Code Playgroud)

然而id,Java端的变量与原始变量不同,因为UTF-8字符变为奇怪的东西.

如何从JavaScript端发送UTF-8字符并在我的Java端再次转换它(Spring 3 with REST,我的Web服务器是Tomcat 7)?

PS 1:即使我不使用encodeUriComponent它似乎我的URL本身编码?

PS 2:提出更清楚的问题:

i.e. my id variable is araç and sent URL is: localhost:8080/sdfasf/ara%C3%A7 
Run Code Online (Sandbox Code Playgroud)

当我看到id变量具有该值时:

araç
Run Code Online (Sandbox Code Playgroud)

代替:

ara%C3%A7 
Run Code Online (Sandbox Code Playgroud)

Spring(或Tomcat)会自动执行此操作吗?当控制器作为路径变量时,有没有办法自动解码它(我的意思是没有写任何东西:

URLDecoder.decode(id,"UTF-8");
Run Code Online (Sandbox Code Playgroud)

它会自动转换)

java jquery spring tomcat utf-8

14
推荐指数
1
解决办法
3万
查看次数