今天要完成一个程序,要通过后台访问另外一个服务,中间需要传递一个姓名过去,就产生了乱码问题,源代码如下:
String data = "&version=140410&inputCharset=1&signType=1&merchantMbrCode=10000135&serviceCode=101&requestId=10000135_1217843792221&requestTime=20080804175632&bankId=ICBC&bankAcctName=陈寄文&bankAcctId=45120&idType=101&idNumber=410230197701214512&ext1=&ext2=&signMsg=null";
System.out.println(data);
URL url = new URL("http://localhost/bankcardcert/bankCardValidate.htm");
StringBuffer bankXmlBuffer = new StringBuffer();
//创建URL连接,提交到银行卡鉴权,获取返回结果
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setRequestProperty("User-Agent", "directclient");
PrintWriter out = new PrintWriter(connection.getOutputStream());
out.println(data);
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(connection
.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
bankXmlBuffer.append(inputLine);
}
in.close();
System.out.println(bankXmlBuffer.toString());
在这里我会告诉那个程序我传递过去的编码是UTF-8,但那边按照UTF-8对姓名进行转码时,出现的确实乱码,基本上都是乱七八糟的东东。
问题肯定是出在并没有告诉它我传递的是UTF-8,我就试着把data转为iso-8859-1编码,似乎也不太行。
data = new String(data.getBytes("utf-8"), "iso-8859-1");
同样也是乱码。
找了一下资料,后来终于找到原因了,需要修改一下这里:
PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));
这样就可以告诉它我传递过去的是utf-8了,那个new String的转码也就不需要了。
后续程序中处理中文姓名的地方如下:
// 银行账户名称
String bankAcctName = bccMerchantReqDto.getBankAcctName();
String inputCharset = bccMerchantReqDto.getInputCharset();
if (StringUtils.isEmpty(bankAcctName)) {
throw VerifyRequestErrorFactory.create(
BccRequestErrorCode.BANKACCTNAME_ERROR.getValue(),
"银行账户名称不能为空");
}
bankAcctName = BccEncodingUtil.parseString(bankAcctName, inputCharset);//按照编码将账户名称转换为指定编码
bccMerchantReqDto.setBankAcctName(bankAcctName);
String pattern = "[\u4E00-\u9FFF\u00B7]{0,16}";
if(!Pattern.matches(pattern, bankAcctName)){
throw VerifyRequestErrorFactory.create(
BccRequestErrorCode.BANKACCTNAME_ERROR.getValue(),
"银行账户名称必须为中文字,当前设置的名称为:"+bankAcctName);
}
BccEncodingUtil.parseString这个方法就是按照我传递过去的inputCharset对bankAcctName进行转码,这样在这个程序中处理的话就再也不会出现乱码了。
分享到:
相关推荐
HttpURLConnection文件下载\httpURLConnection文件下载
导语:个人对网络连接接触的不多,在使用时自己发现一些问题,记录一下。 正文:我在使用HttpURLConnection.getResponseCode()的时候直接报错是IOException错误,responseCode = -1。一直想不明白,同一个程序我调用...
android客户端上传数据中文乱码3中解决方案 一种HttpPost两种HTTPURLCONNECTION
HttpURLConnection的demo,里面有网络请求get post 上传文件,下载文件,介绍HttpURLConnection这个类整体流程是怎样使用的,方便初学者学习
import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import java.util.Map; public class HttpTest { private HttpURLConnection hc = ...
自己写了一个基于httpurlconnection和Asynctask的例子
HttpUrlConnection获取json数据
HttpURLConnection使用总结示例源码
使用HttpURLConnection发送短信
代码包含了httpurlconnection基本操作,一些正常的操作。
java HttpURLConnection示例 HttpURLConnection工具
彻底解决android开发中,使用用HttpUrlConnection与web服务器之间session保持问题
一个简单的例子,使用HttpURLConnection下载图片
封装httpurlconnection 自己动手丰衣足食
远程连接服务器HttpURLConnection,该工具有上传到远程服务器的方法,供参考远程连接服务器HttpURLConnection,该工具有上传到远程服务器的方法,供参考
HttpURLConnection用法详解, 轻松掌握HttpURLConnection开发原理
java网络请求工具类 HttpURLConnection post请求工具类HttpURLConnection httpURLConnection = (HttpURLConnection) url .openConnection(); httpURLConnection.setRequestMethod("POST");// 提交模式
主要介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,非常具有实用价值,需要的朋友可以参考下
在 Android 中对 HttpURLConnection 的简单使用,仅供参考。
Android HttpUrlConnection使用方法 post and get json.