为什么 JUnit 不能处理包含非英文字符的文件? (使用 NetBeans)
Why does JUnit not work with files containing non-English characters? (using NetBeans)
我在 NetBeans 中制作了一个程序,该程序接受输入 .txt 文件,然后将输出写入控制台。
它工作正常,但是当我尝试使用 JUnit 测试它时,程序读取文件不正确。
例如,代替 'ö'
它读取 'ö'
有什么办法可以解决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 测试的上下文中。
我在 NetBeans 中制作了一个程序,该程序接受输入 .txt 文件,然后将输出写入控制台。 它工作正常,但是当我尝试使用 JUnit 测试它时,程序读取文件不正确。
例如,代替 'ö'
它读取 'ö'
有什么办法可以解决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 测试的上下文中。