Java XML编码UTF-8不适用于土耳其字符
我有一个方法来创建和记录xml文件。它会产生损坏的结果。我的土耳其语字符以十六进制表达式书写。当我使用UTF-8时,我无法解决这个问题。顺便说一句,我用Sublime和Notepad++编辑器进行了检查Java XML编码UTF-8不适用于土耳其字符,java,xml,encoding,utf-8,Java,Xml,Encoding,Utf 8,我有一个方法来创建和记录xml文件。它会产生损坏的结果。我的土耳其语字符以十六进制表达式书写。当我使用UTF-8时,我无法解决这个问题。顺便说一句,我用Sublime和Notepad++编辑器进行了检查 public boolean add(BatFile batFile) throws Exception { File inputFile = new File(fileLocation); DocumentBuilderFactory docFactory =
public boolean add(BatFile batFile) throws Exception {
File inputFile = new File(fileLocation);
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(inputFile);
Element rootElement = doc.getDocumentElement();
Element batFileElement = doc.createElement("BatFile");
rootElement.appendChild(batFileElement);
Element batJobName = doc.createElement("Name");
batJobName.appendChild(doc.createTextNode(batFile.getName()));
batFileElement.appendChild(batJobName);
Element batFileBriefDesc = doc.createElement("BriefDesc");
batFileBriefDesc
.appendChild(doc.createTextNode(batFile.getBriefDesc()));
batFileElement.appendChild(batFileBriefDesc);
Element batFileDesc = doc.createElement("Desc");
batFileDesc.appendChild(doc.createTextNode(batFile.getDesc()));
batFileElement.appendChild(batFileDesc);
Element batFileName = doc.createElement("FileName");
batFileName.appendChild(doc.createTextNode(batFile.getFileName()));
batFileElement.appendChild(batFileName);
Element batCommandArgs = doc.createElement("CommandArgs");
for (int k = 0; k < batFile.getCommandArgs().size(); k++) {
Element commandArg = doc.createElement("CommandArg");
// commandArg.setAttribute("ID", String.valueOf(k));
commandArg.appendChild(doc.createTextNode(batFile.getCommandArgs()
.get(k)));
batCommandArgs.appendChild(commandArg);
}
batFileElement.appendChild(batCommandArgs);
Element batCreationTime = doc.createElement("CreationTime");
batCreationTime.appendChild(doc.createTextNode(batFile
.getCreationTime()));
batFileElement.appendChild(batCreationTime);
Element batSchedulerPattern = doc.createElement("SchedulerPattern");
batSchedulerPattern.appendChild(doc.createTextNode(batFile
.getExecutionPattern()));
batFileElement.appendChild(batSchedulerPattern);
Element batTaskID = doc.createElement("TaskID");
if (batFile.getTaskID() != null) {
batTaskID.appendChild(doc.createTextNode(batFile.getTaskID()));
}
batFileElement.appendChild(batTaskID);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource domSource = new DOMSource(doc);
StreamResult result = new StreamResult(new FileWriter(inputFile));
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.transform(domSource, result);
return true;
}
它产生了这样的结果:
<BatFiles>
<BatFile>
<Name>???/Name>
<BriefDesc>???</BriefDesc>
<Desc>???</Desc>
<FileName>FileName</FileName>
<CommandArgs>
<CommandArg>ZZZZZZZZ</CommandArg>
</CommandArgs>
<CreationTime>Merhaba</CreationTime>
<SchedulerPattern>??????</SchedulerPattern>
<TaskID>????</TaskID>
</BatFile>
</BatFiles>
??/Name>
???
???
文件名
zzzzzz
梅哈巴
??????
????
您正在写入字符流,而不让API控制写入数据的编码方式。使用可能不是UTF-8的默认平台编码:
此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的
与StreamResult(在块中)一起使用
您也可能因为以下原因而遇到问题。考虑使用Unicode转义而不是文字。也就是说,使用FileOutputStream解决了我的问题。但是我想创建语义XML文件。不接受使用\u015e代替ş。但顺便说一句,你让我领先。
<BatFiles>
<BatFile>
<Name>???/Name>
<BriefDesc>???</BriefDesc>
<Desc>???</Desc>
<FileName>FileName</FileName>
<CommandArgs>
<CommandArg>ZZZZZZZZ</CommandArg>
</CommandArgs>
<CreationTime>Merhaba</CreationTime>
<SchedulerPattern>??????</SchedulerPattern>
<TaskID>????</TaskID>
</BatFile>
</BatFiles>