2024-06-16 16:57:47 | 我爱编程网
主要分response的字节字符输出流和request接受中文参数doGet(),doPost()的设置四种.以及从服务器下载文件到浏览器的编码问题.
都是我学习java时总结的,希望能帮到你.
response的字节输出流:
// 设置浏览器默认打开的时候采用的字符集编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 设置中文转成字节数组的时候取出的编码
response.getOutputStream().write("如果不设置编码,这里就是乱码".getBytes("UTF-8"));
response的字符输出流:
//设置浏览器默认打开的时候采用的字符集编码,response的字符流的缓冲区的编码.
response.setContentType("text/html;charset=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", "attachment;filename="+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);
}
}
你的概念有问题,java 支持多种编码,在输入的时候就应该制定,不然就有问题,输出的时候倒是很简单。
这个例子是按“Cp1252"读入,转成"UTF-8"输出
String input = new String(dbString.getBytes("Cp1252"), "UTF-8")
byte[] output = input.getBytes("UTF-8");
for (byte b : output) {
System.out.format("0x%02x,", b);
}
很多种方法request.setCharacterEncoding("utf-8"); //设置输入编码格式
response.setContentType("text/html;charset=utf-8"); //设置输出编码格式
一般写个Servlet的过滤器
(getByte("ISO-8859-1"),"utf-8");在配置文件里面过滤.
在java中怎么把一个字符串编译为指定编码格式(如:unicode)的输出很多种方法request.setCharacterEncoding("utf-8");//设置输入编码格式response.setContentType("text/html;charset=utf-8");//设置输出编码格式一般写个Servlet的过滤器(getByte("ISO-8859-1"),"u
python种如何输出指定位小数方法一:round(X,N)该方法并不严格有效,当X小数位数n<N时,仅能够输出n位小数。方法二:print('%.Nf'%X)或者print("%.Nf"%X)注意该方法有两个“%”,没有“,”。方法三:print(format(X,'.Nf')或者print(format(X,".Nf")注意该方法没有"%",但有“,”。更多
如何用python写程序输出姓名?用python编写一个程序,输出你的姓名和学号的方法。1.输入命令提zhidao示符,输入python并按Enter进入python交互模式。2.输入name=input()后按回车,如下所专示。3.输入名字“mymy”,然后回车。此时,变量将“name”回答为“mymy”。4.输入名称后返回,可以看到变量名的内容是属:mym
如何修改jvm启动参数用java命令查看。用java-option进行修改参数。还有tomcat,eclipse启动时通过配置文件加载的。详细如下:安装Java开发软件时,默认安装包含两个文件夹,一个JDK(Java开发工具箱),一个JRE(Java运行环境,内含JVM),其中JDK内另含一个JRE。如果只是运行Java程序,则JRE已足够;而JDK则只有开发人员才用到。
eclipseJava中文输出乱码是什么原因?eclipseJava中文输出乱码的原因可能是字符编码与默认的编码不符合导致的。可以尝试以下方法解决:1.修改Eclipse编码设置:点击Eclipse菜单栏的"Window",选择"Preferences";在弹出的窗口中,找到"General"->"Workspace";在右侧的"Textfileencoding"选项中选择合
Java编程,怎样做一个最简单的输出程序?比如myeclipse,那么就是创建一个类,然后敲入main,alt+/可以导出main函数(Java程序的入口就是main)。如果没有用工具,需要配置环境变量的,配置好之后。建一个Java文件,文件名字和类名相同,包括大小写,例如:publicvoidshow(){Scannerscan=newScanner(System.in())
用python求1000以内的完数用python求1000以内的完数如下:forjinrange(21001):foriinrange(l,j):ifj%1==0:ifs==0:print(j)。第一行:forjinrange(2,1001):创建一个从2到1000的循环,并且将其中的值依次赋值给j。第二行:s=j,创建一个新的变量s,让它等于j,
JAVA获取一段程序运行时间abstract class GetTime { public final void getTime() { long start = System.currentTimeMillis(); runcode(); long end = System.currentTimeMillis(); System.out.println("运行时间:" + (end
2024-04-13 00:38:12
2024-03-31 15:14:06
2024-03-21 00:22:13
2024-02-10 22:15:59
2023-12-26 22:10:45
2023-12-24 20:21:11