有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

UTF8输出,而不是ISO88591 java Linux

应用程序(Java 1.6)在Linux平台上运行,我用ISO-8859-1编码创建了一个文件 像这样

 File localTempDir = new File(tempDir);
 String encoding = TextUtils.ISO_8859_1;

    try {
        String fileName = String.format(fileNameFormat, sdf.format(new Date()));
        tmpFile = File.createTempFile(fileName, "", localTempDir);
        log.info("Created file " + tmpFile.getAbsolutePath());

        OutputStreamWriter outputStreamWriter;

        if(StringUtils.isNotBlank(encoding)){
            outputStreamWriter = new OutputStreamWriter(new FileOutputStream(tmpFile), Charset.forName(encoding));
        }else{
            outputStreamWriter = new OutputStreamWriter(new FileOutputStream(tmpFile));
        }

        BufferedWriter out = new BufferedWriter(outputStreamWriter);
        out.write(content);

        log.debug("With content " + content);
        out.flush();
        out.close();
    } catch (Exception e) {
        log.error("Failed to create file", e);
    }
    return tmpFile;
}`

但仍然得到一个UTF8编码的文件。知道为什么吗


共 (1) 个答案

  1. # 1 楼答案

    先简化。试试这个:

    File localTempDir = new File(tempDir);
    String encoding = "ISO-8859-1"; // "Cp1252" = Windows Latin 1
    
    try {
        String fileName = String.format(fileNameFormat, sdf.format(new Date()));
        tmpFile = File.createTempFile(fileName, "", localTempDir);
        log.info("Created file " + tmpFile.getAbsolutePath());
    
        OutputStreamWriter outputStreamWriter;
    
        if (!encoding.isEmpty()) {
            outputStreamWriter = new OutputStreamWriter(new FileOutputStream(tmpFile), encoding);
        } else {
            outputStreamWriter = new OutputStreamWriter(new FileOutputStream(tmpFile));
        }
    
        PrintWriter out = new PrintWriter(new BufferedWriter(outputStreamWriter));
        try {
            out.print(content);
    
            log.debug("With content " + content);
        finally {
            out.close();
        }
    } catch (Exception e) {
        log.error("Failed to create file", e);
    }
    return tmpFile;
    

    }