java字符编码问题,中文乱码

来源:百度知道 编辑:UC知道 时间:2024/06/30 12:51:55
具体是我用写一个简单的web server,先创建一个监听套接字ServerSocket listenSocket = new ServerSocket(8080),然后Socket connectionSocket = listenSocket.accept(),当有端口请求时从输入流中读取所请求的文件名,然后从输出流输出该文件内容,这时浏览器接受的中文没有乱码。但如果我直接通过套接字输出流输入中文(从键盘输出)或者输出文件名或者目录名(含中文),浏览器接受到的中文就是乱码。
程序简化如下:
import java.io.*;
import java.net.*;
import java.util.*;

class WebServer {
public static void main(String argv[]) throws Exception{
String requestMessageLine;
String fileName;
ServerSocket listenSocket = new ServerSocket(8080);
while(true)
{
Socket connectionSocket = listenSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
requestMessageLine = inFromClient.readLine();
StringTokenizer tokenizedLine =
new StringTokenizer(requestMessageLine);

package com.liuyang;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {
private FilterConfig config;
private String encoding = "utf-8";

public void destroy() {
System.out.println(config);
config = null;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}

public void init(FilterConfig config) throws ServletException {
this.config = config;
String s = config.getInitParameter("encoding");
if (s != null) {<