`
bazhuang
  • 浏览: 149293 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HttpURLConnection乱码问题解决

    博客分类:
  • java
阅读更多
今天要完成一个程序,要通过后台访问另外一个服务,中间需要传递一个姓名过去,就产生了乱码问题,源代码如下:
			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进行转码,这样在这个程序中处理的话就再也不会出现乱码了。
分享到:
评论
9 楼 luliangy 2015-01-27  
我是直接放在URL里面的出了错,试了下放在data里面就没问题了
8 楼 luliangy 2015-01-27  
我是在服务端(webx)getBytes iso8895-1然后utf-8转string得到中文,你的这个方法还是有问题
7 楼 cwalet 2013-04-19  
bazhuang 写道
liwanfeng 写道
data = new String(data.getBytes(), "utf-8");  

我采用的是这种办法,的确可以出现中文,不过当中文和英文交接的位置,则会出现乱码!而且显示的都是“???”,怎么解决?

用这种办法不会出现同样的问题吗?
PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));  

这种方式就是告诉对方,我传递的编码是UTF-8的,对方获取这个参数的时候不会出现问题,如果还是有乱码的问题,可以使用httpClient,使用PostMethod处理


我的问题不是传入data编码不一致,而是返回数据编码不一致,经本文提醒,改
new InputStreamReader(url.openStream(), "UTF8");

即可。之前尝试使用new String()的方法亦得到半中文半问好的结果,百思不得其解~
6 楼 cl1154781231 2012-10-11  
connection.getOutputStream(),"utf-8");确实可以,谢谢。
5 楼 bazhuang 2010-06-19  
liwanfeng 写道
data = new String(data.getBytes(), "utf-8");  

我采用的是这种办法,的确可以出现中文,不过当中文和英文交接的位置,则会出现乱码!而且显示的都是“???”,怎么解决?

用这种办法不会出现同样的问题吗?
PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));  

这种方式就是告诉对方,我传递的编码是UTF-8的,对方获取这个参数的时候不会出现问题,如果还是有乱码的问题,可以使用httpClient,使用PostMethod处理
4 楼 liwanfeng 2010-06-18  
data = new String(data.getBytes(), "utf-8");  

我采用的是这种办法,的确可以出现中文,不过当中文和英文交接的位置,则会出现乱码!而且显示的都是“???”,怎么解决?

用这种办法不会出现同样的问题吗?
PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(),"utf-8"));  
3 楼 daphlylover 2009-12-16  
提交获取或出现部分乱码,,,什么原因??
2 楼 guoxa2003 2009-09-15  
获益良多,问题解决了,真心感谢!希望能再多见到这么有见地的帖子。
1 楼 hhz0422 2009-01-12  

相关推荐

    乱码终极解决办法java实现

    对于给定的"解决乱码终极办法"压缩包文件,很可能是包含了一些示例代码或工具,帮助开发者快速解决特定场景下的乱码问题。如果遇到具体问题,可以参考这些资源,结合本文的知识点,来找到最合适的解决方案。

    java中文乱码解决之道(8)解决URL中文乱码问题Jav

    本文将深入探讨如何在Java中有效地解决URL中文乱码问题。 首先,我们需要理解URL编码的原理。URL编码遵循RFC 3986标准,它规定了在URL中非ASCII字符应被转换为百分号编码形式(%xy),其中xy是该字符的UTF-8编码的...

    android客户端上传数据中文乱码3中解决方案

    android客户端上传数据中文乱码3中解决方案 一种HttpPost两种HTTPURLCONNECTION

    解决了中文乱码的http的get和post请求demo

    总的来说,解决HTTP请求中的中文乱码问题,核心在于正确地设置编码格式,并在发送请求前对中文数据进行编码。无论是GET还是POST请求,都需要确保客户端和服务器之间对字符编码的一致理解。通过阅读提供的文档和示例...

    java读取远程网页乱码解决方案

    总之,解决Java读取远程网页乱码问题的关键在于正确识别和使用网页的字符编码。通过设置请求头、使用特定的API或第三方库,以及处理响应头中的`Content-Type`信息,可以有效地避免乱码问题。同时,编写健壮的代码,...

    android解决乱码

    以下将详细介绍如何解决Android中的乱码问题,并结合提供的"中文乱码问题解决.docx"文档内容进行深入讨论。 首先,理解字符编码是解决乱码的关键。UTF-8是最常用的编码格式,它能支持大部分世界语言,包括中文。但...

    java HttpURLConnection 使用示例

    在本文中,我们将深入探讨`HttpURLConnection`的使用,包括GET和POST请求的实现,以及如何处理可能出现的乱码问题。 一、`HttpURLConnection`概述 `HttpURLConnection`是`URLConnection`的子类,专门用于处理HTTP...

    安卓文件下载上传解压相关-javaandroidzip解压缩解决压缩中文乱码问题).rar

    本文将深入探讨如何使用Java在Android环境中处理这些任务,特别是解决中文文件名在压缩和解压缩过程中可能出现的乱码问题。 首先,让我们关注文件的下载和上传。在Android中,我们可以使用`java.net.URL`和`java...

    java 用HttpsURLConnection进行传递中文时错误总结

    然而,当传输包含中文字符的数据时,由于字符编码的不一致,可能会导致乱码问题。 错误通常出现在两个主要环节:请求头的设置和数据的编码/解码。以下是一些常见问题及其解决方案: 1. **请求头的Content-Type设置...

    java URL乱码的解决办法

    综上所述,解决Java URL乱码问题的关键在于理解和控制编码和解码过程,确保每个环节都使用正确的字符集。通过统一编码规则、显式解码、配置服务器以及使用现代API,可以有效地避免和解决这类问题。

    成功解决 Android 下载中文文件名

    Android 中解决中文文件名下载乱码问题 在 Android 应用程序中,下载服务器上的中文文件名文件时,可能会出现乱码问题。本文将介绍如何解决 Android 下载中文文件名问题,确保文件名正确地下载到 Android 设备上。 ...

    Android中HTTP请求中文乱码解决办法

    在本篇文章中,我们将探讨如何解决Android中HTTP请求中文乱码的常见问题,并通过一个具体的例子来说明解决方案。 首先,我们要明白HTTP请求中可能出现乱码的原因。当发送带有中文字符的HTTP请求时,数据需要正确地...

    Android读取网页源代码解决编码错误问题

    在本教程中,我们将深入探讨如何在Android应用中正确地以GET方式读取网页源代码,并解决可能出现的编码错误导致的乱码问题。 首先,我们需要使用`HttpURLConnection`或者第三方库如`Volley`、`OkHttp`来发起...

    java字符过滤器,过滤器

    总之,Java字符过滤器是处理字符编码问题的关键工具,通过合理的配置和自定义过滤器,我们可以有效避免和解决乱码问题,保证数据的准确性和一致性。在实际开发中,理解并熟练运用这些机制是非常重要的。

    简单的android http请求

    本文将深入探讨如何在Android中实现简单的HTTP请求,并解决可能出现的乱码问题。 首先,Android平台提供了多种方式来执行HTTP请求,其中最常见的是使用HttpURLConnection和HttpClient。尽管在Android 6.0(API级别...

    JAVA中文编码的问题研究

    开发者需要时刻关注编码问题,避免因编码不一致导致的乱码现象,确保程序在全球化环境中稳定运行。 总之,Java在设计上考虑了多种语言的支持,但实际应用中仍需注意中文编码的处理,以确保程序的兼容性和可读性。...

    Android读取网页源代码

    本文将详细讲解如何在Android应用中以GET方式读取网页源代码,并解决可能出现的乱码问题。 首先,我们需要理解HTTP协议中的GET方法。GET是最基本的HTTP请求方法,它向服务器请求指定资源。在Android中,我们通常...

    java应用中的汉字编码问题

    本资料将深入探讨Java中的汉字编码问题,帮助开发者理解并解决可能出现的乱码现象。 首先,我们需要理解编码的基本概念。编码是将字符转换为二进制表示的过程,而解码则是相反的过程。在Java中,最常用的字符编码...

    安卓文件下载上传解压相关-andorid采用post方法把文件传输到自己写的服务器并解决了文件中文编码问.rar

    4. **解决中文编码问题**: 在处理包含中文字符的文件名时,可能会遇到编码问题。Java默认使用ISO-8859-1编码,这可能导致中文乱码。解决方案是在读写文件名时指定正确的编码格式,如UTF-8。在发送HTTP请求时,确保...

    android移动互联笔记

    ### Android移动互联知识点详解 ... 在Android移动互联领域,网络编程是一项核心...同时,注意解决乱码问题,确保数据传输的正确性和一致性。通过上述知识点的学习和实践,开发者能够更好地构建出高效、稳定的移动应用。

Global site tag (gtag.js) - Google Analytics