java程序改变文件编码方式,java写入文件时如何设置编码

发布时间:2022-11-23

本文目录一览:

  1. Java 修改编码格式的几种方式
  2. java程序改变文件编码方式
  3. myeclipse 如何更改java文件的编码方式
  4. 请问java如何改变字符串的编码方式
  5. java怎样设置txt文件的编码格式

Java 修改编码格式的几种方式

主要分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程序改变文件编码方式

package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class ConvertCharset
{
    /**
     * @param path the file path or directory
     * @param back the backup file path or directory 
     * @param cs1 the orignle charset name
     * @param cs2 the dest charset to convert
     */
    public static void convertCharset ( String path, String back, String cs1, String cs2 )
    {
        try
        {
            String separator = System.getProperty ("line.separator");
            File dir = new File (path);
            // a directory, not a file
            if (dir.isDirectory ())
            {
                File[] files = dir.listFiles ();
                for ( int i = 0; i < files.length; i++ )
                {
                    File dirt = files[i];
                    String fn = dirt.getName ();
                    String name = path + File.separator + fn;
                    // recursion
                    if (dirt.isDirectory ())
                    {
                        convertCharset (name, back + File.separator + fn, cs1, cs2);
                    }
                    else
                    {
                        // write
                        File dest = new File(back);
                        if (!dest.exists ())
                        {
                            dest.mkdirs ();
                        }
                        FileOutputStream fos = new FileOutputStream (back + File.separator + fn);
                        OutputStreamWriter osw = new OutputStreamWriter (fos, cs2);
                        BufferedWriter bw = new BufferedWriter (osw);
                        // read
                        FileInputStream fis = new FileInputStream (name);
                        InputStreamReader isr = new InputStreamReader (fis, cs1);
                        BufferedReader br = new BufferedReader (isr);
                        String line = null;
                        while (null != ( line = br.readLine () ))
                        {
                            bw.write (line + separator);
                        }
                        // write
                        fos.flush ();
                        osw.flush ();
                        bw.flush ();
                        bw.close ();
                        osw.close ();
                        fos.close ();
                        // read
                        br.close ();
                        isr.close ();
                        fis.close ();
                    }
                }
            }
            // a single file
            else
            {
                // write
                File dest = new File(back);
                if (!dest.exists ())
                {
                    dest.mkdir ();
                }
                FileOutputStream fos = new FileOutputStream (back + File.separator + dir.getName ());
                OutputStreamWriter osw = new OutputStreamWriter (fos, cs2);
                BufferedWriter bw = new BufferedWriter (osw);
                // read
                FileInputStream fis = new FileInputStream (path);
                InputStreamReader isr = new InputStreamReader (fis, cs1);
                BufferedReader br = new BufferedReader (isr);
                String line = null;
                while (null != ( line = br.readLine () ))
                {
                    bw.write (line + separator);
                }
                // write
                fos.flush ();
                osw.flush ();
                bw.flush ();
                bw.close ();
                osw.close ();
                fos.close ();
                // read
                br.close ();
                isr.close ();
                fis.close ();
            }
            System.out.println ("Convert Success !");
        }
        catch (Exception e)
        {
            e.printStackTrace ();
        }
    }
    public static void main ( String[] args )
    {
        // a single file
        convertCharset ("I:\\2013313workspace\\Yaojiangji\\src\\yaojiangji\\paixu.java",
                "I:\\2013313workspace\\Yaojiangji\\back",
                "GBK",
                "UTF-8");
        // not a file , it's a directory
        // convertCharset ("I:\\2013313workspace\\Yaojiangji\\src\\yaojiangji",
        //         "I:\\2013313workspace\\Yaojiangji\\back\\yaojiangji",
        //         "GBK",
        //         "UTF-8");
    }
}

myeclipse 如何更改java文件的编码方式

  1. 打开电脑myeclipse,进入主界面点击上方菜单栏处 [windows] 选项
  2. 在弹出的菜单栏中选择 [preferences] 选项
  3. 进入prefenence选项界面,点击打开 [general]
  4. 在general菜单栏中,点击选中 [content types],在右方可以看到文件类型
  5. 一般的我们要修改文件类型编码格式,可以点击打开 [text],在下方的文件类型中选择需要修改的文件
  6. 比如小编要修个jsp文件的编码格式,可以选择jsp,在下方选项中也选择jsp文件
  7. 选择完毕文件类型,在下方的encoding选项后改为我们需要修改的编码格式比如utf-8,然后点击 [update],点击OK

请问java如何改变字符串的编码方式

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进行从新编码
//这两者之间没啥关系的

java怎样设置txt文件的编码格式

可以使用流来修改! 例如:

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四种编码格式。