如何在Java中将ANSI转换为UTF8?

11

我有一个文本文件,它是ANSI编码的,我需要将其转换为UTF8编码。

我的文本文件如下: 随机规划是数学规划的一个领域,研究如何在不确定性条件下建模决策问题。例如,尽管在某个时间点上需要做出决策,但必要的信息可能要到以后才能获得。


1
ANSI编码是一个稍微通用的术语,用于指代系统上的标准代码页。换句话说,这取决于您运行的系统的区域设置。如果您指的是_ASCII_,那么文本已经是标准的ASCII字符(<128)在UTF-8中映射到相同的编码。 - Joachim Isaksson
4个回答

10
您可以使用java.nio.charset.Charset类(windows-1252是ANSI的正确名称)来进行显式声明:
public static void main(String[] args) throws IOException {
    Path p = Paths.get("file.txt");
    ByteBuffer bb = ByteBuffer.wrap(Files.readAllBytes(p));
    CharBuffer cb = Charset.forName("windows-1252").decode(bb);
    bb = Charset.forName("UTF-8").encode(cb);
    Files.write(p, bb.array());
}

如果您喜欢,也可以在一行中编写 =)

Files.write(Paths.get("file.txt"), Charset.forName("UTF-8").encode(Charset.forName("windows-1252").decode(ByteBuffer.wrap(Files.readAllBytes(Paths.get("file.txt"))))).array());

0

ASCII字符子集映射到UTF8中的相同字符编码,因此文件实际上不需要任何转换。

要以UTF-8格式输出文件,您可以使用:

PrintWriter out = new PrintWriter(new File(filename), "UTF-8");
out.print(text);
out.close();

我尝试了这个,但它没有将ASCII转换为UTF-8。 - PS Kumar
我的意思是,实际上不需要进行任何转换。ASCII文件已经符合UTF-8标准。 - Lake
抱歉,我的意思是将ANSI转换为UTF8。 - PS Kumar
@Lake 抱歉,但使用重音字符可能需要进行转换。 - Kowlown

0
你可以试试这个。
InputStream inputStream = new BufferedInputStream(new FileInputStream("D:\\sample.txt"));
    Reader reader =
            new InputStreamReader(inputStream, Charset.forName("UTF-8"));

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接