传入中文参数导致的一系列乱码问题

来源:互联网 发布:如何推广淘宝网店 编辑:程序博客网 时间:2024/05/01 18:56

我用struts2传入参数(该参数是中文)结果出现了

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ?? near line 1, column 749 [select new map( idProperty.objectName as objectName, idProperty.deployment.dbid as deploymentDbid ) from org.jbpm.pvm.internal.repository.DeploymentImpl as deployment, org.jbpm.pvm.internal.repository.DeploymentProperty as idProperty, org.jbpm.pvm.internal.repository.DeploymentProperty as keyProperty, org.jbpm.pvm.internal.repository.DeploymentProperty as versionProperty where idProperty.key = 'pdid' and idProperty.deployment = deployment and keyProperty.key = 'pdkey' and keyProperty.objectName = idProperty.objectName and keyProperty.deployment = deployment and versionProperty.key = 'pdversion' and versionProperty.objectName = idProperty.objectName and versionProperty.deployment = deployment and keyProperty.stringValue = ''??'' ]
    org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)

网上找好像是字符转换的问题

于是我把接受的参数转换成utf-8

String processDefinitionKey = new String(deploymentId.getBytes(),Charset.forName("utf-8"));

然后debug,发现processDefinitionKey是乱码。。。。

而我用

String processDefinitionKey = new String(deploymentId.getBytes(),Charset.forName("GBK"));debug是正常的。。。

于是我输出eclipse默认编码
  System.out.println("defaultCahrset-->"+Charset.defaultCharset());

发现是gbk..

我用网上的方法改了eclipse的默认编码:网址如下

http://www.cnblogs.com/smartdog/archive/2011/05/23/2054602.html

又用project的clean重新编译了类

最后不再有错误。。

如果没有改eclipse默认编码

可以用

String processDefinitionKey = new String(deploymentId.getBytes(),Charset.forName("UTF-8"));

试试,他是从二进制转换,应该不会出现乱码

 如果改了eclipse默认编码就不需要用

 

这其中还有一个让我弄了半天

<s:a action="processDefinitionAction_deleteAll?deploymentId=‘%{key}’">删除</s:a>

<s:a action="processDefinitionAction_deleteAll?deploymentId=%{key}">删除</s:a>

注意看 第一句有单引号' '。。。。这个是不能加的。。。

如果你输出processDefinitionKey发现有单引号就是不对了

原创粉丝点击