为什么JUnit无法处理包含非英文字符的文件? 使用NetBeans

问题描述

我在NetBeans中制作了一个程序,该程序接受输入的.txt文件,然后将输出写入控制台。 它工作正常,但是当我尝试使用JUnit对其进行测试时,程序会错误地读取文件

例如,'ö'的insteand读取为'ö'

有什么方法可以解决JUnit不读取非英文字符的问题吗?

解决方法

我怀疑问题实际上出在您的程序或单元测试中,而不是JUnit中。

如果证据与您所说的一样,那么我希望您的代码执行类似的操作

Reader r = new FileReader(filename);

这将打开文件并根据默认字符集设置字符集解码器。

  • 在NetBeans中运行代码时,默认字符集为UTF-8,并且您正在正确读取文件(该文件采用UTF-8编码)。

  • 在JUnit测试的上下文中运行它时,默认字符集(显然)是LATIN-1,它与输入文件的编码不匹配。

您的代码使用默认字符集推断其输入文件的编码可能是不正确的。或者,可能是您的JUnit测试不正确,因为它没有设置 JVM默认字符集来匹配测试文件。

使用特定字符集(UTF-8)打开此文件的方式为:

// Java 11
Reader r = new FileReader(filename,StandardCharsets.UTF_8);

// Java 8 and earlier
Reader r = new InputStreamReader(new FileInputStream(filename),"UTF-8");

您不能更改正在运行的JVM的默认字符集。但是,当您启动运行JUnit测试的JVM时,可以在JVM选项中覆盖平台默认字符集。 (请参见Setting the default Java character encoding


您也可能误解了证据,而输出端的编码问题实际上是 ;也就是说,在您运行JUnit测试的情况下,默认字符集和控制台的实际字符集不匹配。