Get方法中文乱码的处理

 tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设置。
 打开<tomcat_home>\conf目录下server.xml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个组件添加一个属性:URIEncoding="GBK"。修改后的Connector设置为:

<Connector port="8080" maxHttpHeaderSize="8192"  
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
               enableLookups="false" redirectPort="8443" acceptCount="100"  
               connectionTimeout="20000" disableUploadTimeout="true" <span style="color: #ff0000;">URIEncoding="GBK"</span> /> 

 

在Java中使用GET方法获取HTML内容时出现乱码,通常是因为服务器返回的内容编码与Java程序读取时使用的编码方式不一致所致。以下是几种常见的解决方案: ### 1. 指定正确的字符编码进行解码 在读取服务器返回的HTML内容时,确保使用与服务器响应内容一致的字符编码(如UTF-8、GBK等)进行解码。可以使用`InputStreamReader`并指定字符集来读取输入流。 ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class GetHtmlContent { public static void main(String[] args) throws Exception { String url = "http://example.com"; HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.setRequestMethod("GET"); // 使用服务器返回的编码方式,如UTF-8 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line; StringBuilder content = new StringBuilder(); while ((line = reader.readLine()) != null) { content.append(line); } reader.close(); System.out.println(content.toString()); } } ``` ### 2. 从HTTP响应头中获取编码信息 服务器通常会在HTTP响应头中的`Content-Type`字段指定响应内容的字符集,例如`text/html; charset=UTF-8`。可以通过解析该字段来动态获取编码方式。 ```java String contentType = connection.getContentType(); // 获取Content-Type头 String charset = "UTF-8"; // 默认编码 if (contentType != null && contentType.contains("charset=")) { charset = contentType.split("charset=")[1]; } BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), charset)); ``` ### 3. 使用第三方库简化处理 Apache HttpClient 或 Jsoup 等第三方库已经内置了对字符编码的处理逻辑,可以更方便地获取HTML内容并自动识别编码。 #### 使用 Jsoup 示例: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JsoupExample { public static void main(String[] args) throws Exception { String url = "http://example.com"; Document doc = Jsoup.connect(url).get(); // 自动识别编码 System.out.println(doc.html()); } } ``` ### 4. 处理URL中的中文参数乱码 如果GET请求中包含中文参数,应确保在构建URL时对参数进行适当的URL编码,避免参数在传输过程中因编码不一致导致问题。 ```java import java.net.URLEncoder; String param = "中文"; String encodedParam = URLEncoder.encode(param, "UTF-8"); String url = "http://example.com?param=" + encodedParam; ``` ### 5. 配置服务器端编码 确保服务器端返回的HTML内容使用统一的编码格式(如UTF-8),并在HTTP响应头中正确声明`Content-Type: text/html; charset=UTF-8`,以避免客户端解析时出现乱码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值