Junit Test在不同IDE下的不同结果
Different results of Junit Test in different IDEs
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>")
- 一切正常。
它可以是什么?
您在读取文件时没有指定字符集,因此它使用 JVM 默认值,afaik 运行 来自 IntelliJ 通常默认为 UTF-8,而 Eclipse(至少在 Windows ) 默认为默认的非 unicode 字符集(例如西欧的 Cp1252)。
您需要明确说明,如 FileReader
的文档中所述:
The constructors of this class assume that the default character
encoding and the default byte-buffer size are appropriate. To specify
these values yourself, construct an InputStreamReader on a
FileInputStream.
换句话说:
new InputStreamReader(new FileInputStream("resources/file.xml"), StandardCharsets.UTF_8)
或者,让 SAXBuilder
为您处理,然后给它一个 InputStream
。我相信 - 但我不是 100% 肯定 - 这将确定 XML 声明设置的字符:
sax.build(new FileInputStream("resources/file.xml"))
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>")
- 一切正常。
它可以是什么?
您在读取文件时没有指定字符集,因此它使用 JVM 默认值,afaik 运行 来自 IntelliJ 通常默认为 UTF-8,而 Eclipse(至少在 Windows ) 默认为默认的非 unicode 字符集(例如西欧的 Cp1252)。
您需要明确说明,如 FileReader
的文档中所述:
The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate. To specify these values yourself, construct an InputStreamReader on a FileInputStream.
换句话说:
new InputStreamReader(new FileInputStream("resources/file.xml"), StandardCharsets.UTF_8)
或者,让 SAXBuilder
为您处理,然后给它一个 InputStream
。我相信 - 但我不是 100% 肯定 - 这将确定 XML 声明设置的字符:
sax.build(new FileInputStream("resources/file.xml"))