【问题标题】:Different results of Junit Test in different IDEs不同IDE下Junit Test的结果不同
【发布时间】:2017-06-11 14:55:58
【问题描述】:
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import java.io.FileReader;

public class Test1 {

    @org.junit.Test
    public void main() throws Exception {
        SAXBuilder sax = new SAXBuilder();
        Document doc = sax.build(new FileReader("resources/file.xml"));
        System.out.println(doc.getRootElement().getText());
    }
}

file.xml 包含:<root>©</root> 编码是 UTF-8。

使用的库 jdom2-2.06、hamcrest-core-1.3、junit-4.11。

当我在 IntelliJ 中运行它时,输出是这样的:©

当我在 NetBeans 中运行它时,输出是这样的:©

如果我将代码放到 public static void main 并运行它 - 一切正常。

如果我将 FileReader 更改为 FileInputStream - 一切正常。

如果我将 FileReader 更改为 StringReader("<root>©</root>") - 一切正常。

会是什么?

【问题讨论】:

  • 编码问题。
  • 为什么 IntelliJ 不受这些问题的影响

标签: java intellij-idea netbeans junit libs


【解决方案1】:

读取文件时您没有指定字符集,因此它使用 JVM 默认值,从 IntelliJ 运行的 afaik 通常默认为 UTF-8,而 Eclipse(至少在 Windows 上)默认为默认的非 unicode 字符集(例如西欧的 Cp1252)。

您需要明确,如FileReader 的文档中所述:

这个类的构造函数假定默认字符 编码和默认字节缓冲区大小是合适的。指定 这些值自己,在一个上构造一个 InputStreamReader 文件输入流。

换句话说:

new InputStreamReader(new FileInputStream("resources/file.xml"), StandardCharsets.UTF_8)

或者,让SAXBuilder 为您处理这个问题,然后给它一个InputStream。我相信 - 但我不是 100% 确定 - 这将确定 XML 声明的字符集:

sax.build(new FileInputStream("resources/file.xml"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多