gpt4 book ai didi

android - 写入 xml 时文件名中的字节顺序标记

转载 作者:行者123 更新时间:2023-11-29 23:51:23 24 4
gpt4 key购买 nike

我有一个方法,用 Scanner 解析 .txt 文件, 用 DocumentBuilder 重新组装, 并用 TransformerFactory 转换成一个 .xml 文件.

一切正常,除了一点点不便:以这种方式创建的文件在其名称的开头包含我认为是 BOM 的内容。我在 UTF-8 中编码.

保存在%EF%BB%BFexample.xml下而不是 example.xml .

我怎样才能避免这种情况?

编辑: 正如您在评论中看到的,有人指出第一行 fileTitle 的可能性由 Scanner 读取来自 userText可能包含 UTF-8 的 BOM ,结果证明是真的(再次,请参阅评论)。

private void writeXML() {
try {
File userText = new File(passedPath);

Scanner scn = new Scanner(new FileInputStream(userText), "UTF-8");

String separate = ";";
String fileTitle = scn.nextLine();
int indSepTitle = fileTitle.indexOf(separate);
fileTitle = fileTitle.substring(0,indSepTitle);

String fileOutputName = fileTitle+".xml";
File mOutFile = new File(getFilesDir(), fileOutputName);

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

//root element
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("Collection");
doc.appendChild(rootElement);

//List element
Element listElement = doc.createElement("List");
rootElement.appendChild(listElement);

//set Attributes to listElement
Attr attr = doc.createAttribute("name");
attr.setValue(fileTitle);
listElement.setAttributeNode(attr);

while(scn.hasNext()) {
String line = scn.nextLine();
String[] parts = line.split(separate);

//vocabulary element
Element ringElement = doc.createElement("element_ring");
listElement.appendChild(n1Element);

//add 1st Element
Element n1Element = doc.createElement("element1");
natWord.appendChild(doc.createTextNode(parts[0]));
ringElement.appendChild(n1Element);

//add 2ndElement
Element n2Element = doc.createElement("element2");
forWord.appendChild(doc.createTextNode(parts[1]));
ringElement.appendChild(n2Element);

...
//add other Elements accordingly
...
}

//write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(mOutFile);

transformer.transform(source, result);


} catch (ParserConfigurationException e) {
e.printStackTrace();
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}

}

最佳答案

为了完成:

我包含了以下简短代码,用于从提取的字符串中删除 BOM,用作正在创建的 .xml 文件的标题名称。

char[] titleChars = fileTitle.toCharArray();

String cutTitle = "";
for(int i=1; i<titleChars.length;i++){
cutTitle = cutTitle+titleChars[i];
}

String fileOutputName = cutTitle+".xml";

关于android - 写入 xml 时文件名中的字节顺序标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50874624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com