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

我用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发现有单引号就是不对了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值