今天要完成一个程序,要通过后台访问另外一个服务,中间需要传递一个姓名过去,就产生了乱码问题,源代码如下:
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进行转码,这样在这个程序中处理的话就再也不会出现乱码了。
分享到:
相关推荐
对于给定的"解决乱码终极办法"压缩包文件,很可能是包含了一些示例代码或工具,帮助开发者快速解决特定场景下的乱码问题。如果遇到具体问题,可以参考这些资源,结合本文的知识点,来找到最合适的解决方案。
本文将深入探讨如何在Java中有效地解决URL中文乱码问题。 首先,我们需要理解URL编码的原理。URL编码遵循RFC 3986标准,它规定了在URL中非ASCII字符应被转换为百分号编码形式(%xy),其中xy是该字符的UTF-8编码的...
android客户端上传数据中文乱码3中解决方案 一种HttpPost两种HTTPURLCONNECTION
总的来说,解决HTTP请求中的中文乱码问题,核心在于正确地设置编码格式,并在发送请求前对中文数据进行编码。无论是GET还是POST请求,都需要确保客户端和服务器之间对字符编码的一致理解。通过阅读提供的文档和示例...
总之,解决Java读取远程网页乱码问题的关键在于正确识别和使用网页的字符编码。通过设置请求头、使用特定的API或第三方库,以及处理响应头中的`Content-Type`信息,可以有效地避免乱码问题。同时,编写健壮的代码,...
以下将详细介绍如何解决Android中的乱码问题,并结合提供的"中文乱码问题解决.docx"文档内容进行深入讨论。 首先,理解字符编码是解决乱码的关键。UTF-8是最常用的编码格式,它能支持大部分世界语言,包括中文。但...
在本文中,我们将深入探讨`HttpURLConnection`的使用,包括GET和POST请求的实现,以及如何处理可能出现的乱码问题。 一、`HttpURLConnection`概述 `HttpURLConnection`是`URLConnection`的子类,专门用于处理HTTP...
本文将深入探讨如何使用Java在Android环境中处理这些任务,特别是解决中文文件名在压缩和解压缩过程中可能出现的乱码问题。 首先,让我们关注文件的下载和上传。在Android中,我们可以使用`java.net.URL`和`java...
然而,当传输包含中文字符的数据时,由于字符编码的不一致,可能会导致乱码问题。 错误通常出现在两个主要环节:请求头的设置和数据的编码/解码。以下是一些常见问题及其解决方案: 1. **请求头的Content-Type设置...
综上所述,解决Java URL乱码问题的关键在于理解和控制编码和解码过程,确保每个环节都使用正确的字符集。通过统一编码规则、显式解码、配置服务器以及使用现代API,可以有效地避免和解决这类问题。
Android 中解决中文文件名下载乱码问题 在 Android 应用程序中,下载服务器上的中文文件名文件时,可能会出现乱码问题。本文将介绍如何解决 Android 下载中文文件名问题,确保文件名正确地下载到 Android 设备上。 ...
在本篇文章中,我们将探讨如何解决Android中HTTP请求中文乱码的常见问题,并通过一个具体的例子来说明解决方案。 首先,我们要明白HTTP请求中可能出现乱码的原因。当发送带有中文字符的HTTP请求时,数据需要正确地...
在本教程中,我们将深入探讨如何在Android应用中正确地以GET方式读取网页源代码,并解决可能出现的编码错误导致的乱码问题。 首先,我们需要使用`HttpURLConnection`或者第三方库如`Volley`、`OkHttp`来发起...
总之,Java字符过滤器是处理字符编码问题的关键工具,通过合理的配置和自定义过滤器,我们可以有效避免和解决乱码问题,保证数据的准确性和一致性。在实际开发中,理解并熟练运用这些机制是非常重要的。
本文将深入探讨如何在Android中实现简单的HTTP请求,并解决可能出现的乱码问题。 首先,Android平台提供了多种方式来执行HTTP请求,其中最常见的是使用HttpURLConnection和HttpClient。尽管在Android 6.0(API级别...
开发者需要时刻关注编码问题,避免因编码不一致导致的乱码现象,确保程序在全球化环境中稳定运行。 总之,Java在设计上考虑了多种语言的支持,但实际应用中仍需注意中文编码的处理,以确保程序的兼容性和可读性。...
本文将详细讲解如何在Android应用中以GET方式读取网页源代码,并解决可能出现的乱码问题。 首先,我们需要理解HTTP协议中的GET方法。GET是最基本的HTTP请求方法,它向服务器请求指定资源。在Android中,我们通常...
本资料将深入探讨Java中的汉字编码问题,帮助开发者理解并解决可能出现的乱码现象。 首先,我们需要理解编码的基本概念。编码是将字符转换为二进制表示的过程,而解码则是相反的过程。在Java中,最常用的字符编码...
4. **解决中文编码问题**: 在处理包含中文字符的文件名时,可能会遇到编码问题。Java默认使用ISO-8859-1编码,这可能导致中文乱码。解决方案是在读写文件名时指定正确的编码格式,如UTF-8。在发送HTTP请求时,确保...
### Android移动互联知识点详解 ... 在Android移动互联领域,网络编程是一项核心...同时,注意解决乱码问题,确保数据传输的正确性和一致性。通过上述知识点的学习和实践,开发者能够更好地构建出高效、稳定的移动应用。