基础工具---解决中文乱码(HTTP中文乱码)
来源:互联网 发布:手机淘宝好评在哪里写 编辑:程序博客网 时间:2024/05/29 08:30
package com.ftvalue.customer.util;import org.springframework.http.HttpInputMessage;import org.springframework.http.HttpOutputMessage;import org.springframework.http.MediaType;import org.springframework.http.converter.AbstractHttpMessageConverter;import org.springframework.util.FileCopyUtils;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;/** * Created on 12/12/17. * * @author danhui */public class UTF8StringHttpMessageConverter extends AbstractHttpMessageConverter<String> { public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private final List<Charset> availableCharsets; private boolean writeAcceptCharset = true; public UTF8StringHttpMessageConverter() { List<MediaType> supportedMediaTypes = new ArrayList<MediaType>(); supportedMediaTypes.add(new MediaType("text", "plain", DEFAULT_CHARSET)); supportedMediaTypes.add(MediaType.ALL); setSupportedMediaTypes(supportedMediaTypes); this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values()); } /** * Indicates whether the {@code Accept-Charset} should be written to any outgoing request. * <p>Default is {@code true}. */ public void setWriteAcceptCharset(boolean writeAcceptCharset) { this.writeAcceptCharset = writeAcceptCharset; } @Override public boolean supports(Class<?> clazz) { return String.class.equals(clazz); } @Override protected String readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException { Charset charset = getContentTypeCharset(inputMessage.getHeaders().getContentType()); return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset)); } private Charset getContentTypeCharset(MediaType contentType) { if (contentType != null && contentType.getCharSet() != null) { return contentType.getCharSet(); } else { return this.DEFAULT_CHARSET; } } @Override protected Long getContentLength(String s, MediaType contentType) { if (contentType != null && contentType.getCharSet() != null) { Charset charset = contentType.getCharSet(); try { return (long) s.getBytes(charset.name()).length; } catch (UnsupportedEncodingException ex) { // should not occur throw new InternalError(ex.getMessage()); } } else { return null; } } @Override protected void writeInternal(String s, HttpOutputMessage outputMessage) throws IOException { if (writeAcceptCharset) { outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets()); } MediaType contentType = outputMessage.getHeaders().getContentType(); Charset charset = contentType.getCharSet() != null ? contentType.getCharSet() : DEFAULT_CHARSET; FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(), charset)); } /** * Return the list of supported {@link Charset}. * * <p>By default, returns {@link Charset#availableCharsets()}. Can be overridden in subclasses. * * @return the list of accepted charsets */ protected List<Charset> getAcceptedCharsets() { return this.availableCharsets; }}
阅读全文
0 0
- 基础工具---解决中文乱码(HTTP中文乱码)
- android到http中文乱码解决
- Android HTTP请求中文乱码解决
- Android 解决HTTP请求中文乱码
- 【已解决】http请求中文乱码问题
- http post 中文乱码
- http 请求中文乱码
- SSH工具中文乱码
- 解决中文乱码问题
- Servlet 中文乱码解决
- ajax中文乱码解决
- Servlet 中文乱码解决
- 解决中文乱码问题
- 解决中文乱码问题
- 解决Struts中文乱码
- 过滤器解决中文乱码
- 中文乱码解决
- 解决中文乱码问题
- ionic_refresher列表
- spring boot ajax文件上传超过maxsize,多次调用错误处理方法(填坑),从而多次响应,导致前端拿不到错误信息
- 74cms某漏洞可导致普通用户getshell
- C#实现字符替换的三种方法
- MYSQL 5.7.20 免安装版 自用安装
- 基础工具---解决中文乱码(HTTP中文乱码)
- 容器集群管理平台的比较
- mysql 数据处理
- linux 移动硬盘文件无法改变权限
- 每个人的心里都有一团火,路过的人只看到烟。
- PPP相关-泊松簇过程PCP-matlab程序
- ionic的安装与环境配置
- ePoll相关文章
- Nvidia-Docker安装使用 -- 可使用GPU的Docker容器