当前位置: 首页 > 知识库问答 >
问题:

从ANSI到UTF8的Java文件编码转换

冯曾笑
2023-03-14
public class ConvertFromAnsiToUtf8 {

    private static final char BYTE_ORDER_MARK = '\uFEFF';
    private static final String ANSI_CODE = "windows-1252";
    private static final String UTF_CODE = "UTF8";
    private static final Charset ANSI_CHARSET = Charset.forName(ANSI_CODE);

    public static void main(String[] args) {

        List<File> fileList;
        File inputFolder = new File(args[0]);
        if (!inputFolder.isDirectory()) {
            return;
        }
        File parentDir = new File(inputFolder.getParent() + "\\"
                    + inputFolder.getName() + "_converted");

        if (parentDir.exists()) {
            return;
        }
        if (parentDir.mkdir()) {

        } else {
            return;
        }

        fileList = new ArrayList<File>();
        for (final File fileEntry : inputFolder.listFiles()) {
            fileList.add(fileEntry);
        }

        InputStream in;

        Reader reader = null;
        Writer writer = null;
        try {
            for (File file : fileList) {
                in = new FileInputStream(file.getAbsoluteFile());
                reader = new InputStreamReader(in, ANSI_CHARSET);

                OutputStream out = new FileOutputStream(
                            parentDir.getAbsoluteFile() + "\\"
                                            + file.getName());
                writer = new OutputStreamWriter(out, UTF_CODE);
                writer.write(BYTE_ORDER_MARK);
                char[] buffer = new char[10];
                int read;
                while ((read = reader.read(buffer)) != -1) {
                    System.out.println(read);
                    writer.write(buffer, 0, read);
                }
            }
            reader.close();
            writer.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

任何指针都将有所帮助。

谢谢,阿希什

共有1个答案

叶元凯
2023-03-14

发布的代码正确地从windows-1252转码到UTF-8。

记事本++消息令人困惑,因为“ANSI as UTF-8”没有明显的含义;它似乎是记事本++中的一个开放缺陷。我认为Notepad++意味着没有BOM的UTF-8(请参见编码菜单)

Microsoft Access作为一个Windows程序,可能希望UTF-8文件以字节顺序标记(BOM)开始。

import java.io.*;
import java.nio.charset.*;

public class Ansi1252ToUtf8 {
  private static final char BYTE_ORDER_MARK = '\uFEFF';

  public static void main(String[] args) throws IOException {
    Charset windows1252 = Charset.forName("windows-1252");
    try (InputStream in = new FileInputStream(args[0]);
        Reader reader = new InputStreamReader(in, windows1252);
        OutputStream out = new FileOutputStream(args[1]);
        Writer writer = new OutputStreamWriter(out, StandardCharsets.UTF_8)) {
      writer.write(BYTE_ORDER_MARK);
      char[] buffer = new char[1024];
      int read;
      while ((read = reader.read(buffer)) != -1) {
        writer.write(buffer, 0, read);
      }
    }
  }
}
 类似资料:
  • 我尝试用我的JAVA servlets将WE8MSWIN1252编码中的一些文本转换为UTF8。 最好的问候。 R.

  • 建议选择 safe 方式命名文件名。 经测试,以下修改源码以适应 utf-8 命名方式兼容性也不好。 // 修改\inc\pageutils.php中utf8_encodeFN、utf8_decodeFN两个函数   function utf8_encodeFN($file,$safe=true){ global $conf; //if($conf['fnencode'] == '

  • 我有一些用ANSI编码的php脚本文件。现在我已经将我的网站转换为html5,我需要UTF-8中的所有内容,以便这些文件中的重音可以正确显示,而无需通过iconv()进行任何php转换。我使用记事本++在UTF-8上设置脚本编码并保存文件,大多数都很好,重音显示正确,只有主脚本现在阻止了一切,服务器只返回一个白页,没有任何错误消息,即使使用! 当我在记事本++中将编码更改为ANSI并保存文件而不做

  • 问题内容: 请给我帮助。我正在使用一个Java应用程序,它将数据从txt文件转换为数据库,问题是该文件具有ANSI编码,由于它来自我的应用程序之外,并且当我将数据写到该文件时,我无法更改。数据库我有一些“ ???” 内。我的问题是,如何将从文件中读取的数据从ANSI转换为可以处理这些奇怪符号的UTF-8。我试过了Byte []到String的转换,但是没有用。 问题答案: 使用像这样打开一个解码阅

  • 问题内容: 我有一个包含一些非utf8特征的文件(例如“ ISO-8859-1”),因此我想将该文件(或读取的)转换为UTF8编码,我该怎么办? 代码是这样的: 编辑:放置一个编码示例 问题答案: 在那里,文本已解码。您可以通过simmetric Writer / OutputStream方法使用您喜欢的编码(例如UTF-8)来编写它。

  • 问题内容: 我正在尝试在Windows 8.1上使用node.js(0.10.29)从磁盘加载UTF8 json文件。以下是运行的代码: 运行此命令时出现以下错误: 现在,当我将文件编码(使用Notepad ++)更改为ANSI时,它可以正常工作。 任何想法为什么会这样?在Windows上进行开发的同时,最终解决方案将部署到各种非Windows服务器上,例如,如果将ANSI文件部署到Linux,我