我在java 1.4中使用DocumentBuilder
解析XML。
XML具有第一線作爲在java中獲取XML的編碼類型
xml version="1.0" encoding="GBK"
我想要得到的XML的編碼類型和使用它。我怎樣才能得到「GBK」
基本上我會再製作一個XML,我希望encoding="GBK"
被保留。
目前它正在迷路並設置爲默認值UTF-8
有許多不同編碼的XML我需要閱讀編碼od源碼和必要的東西。
請幫
我在java 1.4中使用DocumentBuilder
解析XML。
XML具有第一線作爲在java中獲取XML的編碼類型
xml version="1.0" encoding="GBK"
我想要得到的XML的編碼類型和使用它。我怎樣才能得到「GBK」
基本上我會再製作一個XML,我希望encoding="GBK"
被保留。
目前它正在迷路並設置爲默認值UTF-8
有許多不同編碼的XML我需要閱讀編碼od源碼和必要的東西。
請幫
使用javax.xml.stream.XMLStreamReader
分析文件,那麼你可以調用getEncoding()
。這個
BT我需要它在Java 1.4 – user1228785 2012-02-24 11:50:15
一種方法是這樣的
final XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(new FileReader(testFile));
//running on MS Windows fileEncoding is "CP1251"
String fileEncoding = xmlStreamReader.getEncoding();
//the XML declares UTF-8 so encodingFromXMLDeclaration is "UTF-8"
String encodingFromXMLDeclaration = xmlStreamReader.getCharacterEncodingScheme();
在我的MS Windows機器上,'getEncoding( )'* always *返回'null'。 'getCharacterEncodingScheme()'只返回文件所聲明的編碼*不*有UTF-8字節順序標記,否則還有'null'。 – Paramaeleon 2016-03-04 09:24:07
這一個適用於各種編碼,考慮到既關注的BOM和XML聲明。默認爲UTF-8
,如果不申請:
String encoding;
FileReader reader = null;
XMLStreamReader xmlStreamReader = null;
try {
InputSource is = new InputSource(file.toURI().toASCIIString());
XMLInputSource xis = new XMLInputSource(is.getPublicId(), is.getSystemId(), null);
xis.setByteStream(is.getByteStream());
PropertyManager pm = new PropertyManager(PropertyManager.CONTEXT_READER);
for (Field field : PropertyManager.class.getDeclaredFields()) {
if (field.getName().equals("supportedProps")) {
field.setAccessible(true);
((HashMap<String, Object>) field.get(pm)).put(
Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY,
new XMLErrorReporter());
break;
}
}
encoding = new XMLEntityManager(pm).setupCurrentEntity("[xml]".intern(), xis, false, true);
if (encoding != "UTF-8") {
return encoding;
}
// From @matthias-heinrich’s answer:
reader = new FileReader(file);
xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(reader);
encoding = xmlStreamReader.getCharacterEncodingScheme();
if (encoding == null) {
encoding = "UTF-8";
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new UndeclaredThrowableException(e);
} finally {
if (xmlStreamReader != null) {
try {
xmlStreamReader.close();
} catch (XMLStreamException e) {
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
return encoding;
測試Java 6的有:與BOM
UTF-8
XML文件,以XML聲明✓無BOMUTF-8
XML文件,以XML聲明✓UTF-8
帶BOM的XML文件,不含XML聲明✓UTF-8
XML文件不含BOM,不含XML聲明✓ISO-8859-1
XML文件(無BOM),與XML聲明✓與BOMUTF-16LE
XML文件,而XML聲明✓與BOMUTF-16BE
XML文件,而XML聲明✓常委在這些巨人的肩膀上:
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import javax.xml.stream.*;
import org.xml.sax.*;
import com.sun.org.apache.xerces.internal.impl.*;
import com.sun.org.apache.xerces.internal.xni.parser.*;
'org.w3c.dom.Document.getXmlEncoding()'? – artbristol 2012-02-24 11:52:22
即使這是舊的:有一個官方的W3C聲明:https://www.w3.org/TR/xml/#sec-guessing – 2017-08-17 14:54:01