都是我学习java时总结的,希望能帮到你.
response的字节输出流:
// 设置浏览器默认打开的时候采用的字符集编码
response.setHeader("Content-Type", "text/htmlcharset=UTF-8")
// 设置中文转成字节数组的时候取出的编码
response.getOutputStream().write("如果不设置编码,这里就是乱码".getBytes("UTF-8"))
response的字符输出流:
//设置浏览器默认打开的时候采用的字符集编码,response的字符流的缓冲区的编码.
response.setContentType("text/htmlcharset=UTF-8")
response.getWriter().println("中文")
request的doGet()编码解决:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")
System.out.println("GET方式:"+name)
request的doPost()编码解决:
request.setCharacterEncoding("UTF-8")
String name = request.getParameter("name")
System.out.println("POST方式:"+name)
下载文件时浏览器编码问题:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.接收参数
String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8")
System.out.println(filename)
// 2.完成文件下载:
// 2.1设置Content-Type头(获取文件的mime类型)
String type = this.getServletContext().getMimeType(filename)
//设置文件的mime类型
response.setHeader("Content-Type", type)
// 2.3web项目文件的绝对路径
String realPath = this.getServletContext().getRealPath("/download/"+filename)
// 获得浏览器的类型处理中文文件的乱码问题.(User-Agent:服务器收到客户端版本之类的一些信息)
String agent = request.getHeader("User-Agent")
System.out.println(agent)
if(agent.contains("Firefox")){
filename = base64EncodeFileName(filename)
}else{
//IE谷歌编码
filename = URLEncoder.encode(filename,"UTF-8")
}
// 2.2设置Content-Disposition头(固定写法,让浏览器必须下载,不能直接打开)
response.setHeader("Content-Disposition", "attachmentfilename="+filename)
//获得文件
InputStream is = new FileInputStream(realPath)
// 获得response指定的方法获取输出流:如果用其他流是直接拷贝而不是下载
OutputStream os = response.getOutputStream()
int len = 0
byte[] b = new byte[1024]
while((len = is.read(b))!= -1){
os.write(b, 0, len)
}
//响应流可以不关,在服务器做出相应后服务器会自动把response获得的流关闭
is.close()
}
//火狐
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder()
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?="
} catch (UnsupportedEncodingException e) {
e.printStackTrace()
throw new RuntimeException(e)
}
}
byte[] b=string.getBytes("GB2312")//使用GB2312编码方式对字符串string进行编码//这时要想将字节数组b的内容正确解码只能使用GB2312的编码方式进行解码,即String str=new String(b,"GB2312")//这里若使用UTF-8编码方式来进行解码就会乱码//将eclipse默认的编码方式改为UTF-8,只是用该编码方式对.java源文件进行编码保存//这个对new String(string.getBytes("GB2312"),"UTF-8")没啥影响的//因为从java源文件获取字符串string时,已经通过UTF-8编码方式进行解码了//而string.getBytes("GB2312")是使用指定的编码方式对字符串string进行从新编码//这两者之间没啥关系的可以使用流来修改!百如:
String path ="C......"
File file = new File(path)
Writer outTxt = new OutputStreamWriter(new FileOutputStream(file,true), "UTF-8")
outTxt.write("文件内度容格式不正知确, 此文件已被系统删除!道 ")
outTxt.close()注意:记版事本只支持ANSI、权Unicode、Unicode
big
endian、UTF-8四种编码格式。