相关疑难解决方法(0)

在scala中以UTF-8读取xml

我正在尝试使用以下代码将文件读取到xml:

import scala.xml._

object HebrewToEnglishCityTranslator {

  val data = XML.loadFile("cities_hebrew_utf.xml");

  for(val entry <- data \\ "city") {
    val hebrewName = (entry \\ "hebrew_name").text
    val englishName = (entry \\ "english_name").text
    println(hebrewName + "=" + englishName)   }
Run Code Online (Sandbox Code Playgroud)

但是,我的文件以UTF-8(希伯来语字符)编码,而XML编码则是 val encoding = "ISO-8859-1"

我该怎么办?

xml encoding scala

10
推荐指数
1
解决办法
4366
查看次数

如何将字符从Oracle编码为XML?

在我的环境中,我使用Java将结果集序列化为XML.它基本上是这样的:

//foreach column of each row
xmlHandler.startElement(uri, lname, "column", attributes);
String chars = rs.getString(i);
xmlHandler.characters(chars.toCharArray(), 0, chars.length());
xmlHandler.endElement(uri, lname, "column");
Run Code Online (Sandbox Code Playgroud)

在Firefox中,XML看起来像这样:

<row num="69004">
    <column num="1">10069</column>
    <column num="2">sd&#26;</column>
    <column num="3">FCVolume                      </column>
</row>
Run Code Online (Sandbox Code Playgroud)

但是当我解析XML时,我得到了a

org.xml.sax.SAXParseException:字符引用"  "是无效的XML字符.

我现在的问题是:我必须替换哪些字符,或者如何编码我的字符,它们将是有效的XML?

java xml oracle encoding

8
推荐指数
1
解决办法
9320
查看次数

验证XML文档会导致"1字节UTF-8序列的无效字节1".

我正在使用Probatron4j验证一些针对Schematron样式表的XML文件,Probatron4j在内部使用Saxon.大多数情况下,这工作正常,但偶尔,处理崩溃与错误

org.xml.sax.SAXParseException:1字节UTF-8序列的无效字节1.

我的研究表明,这条消息通常表明(没有特别的顺序)

  • 公然无效的数据(例如,尝试读取ZIP文件,就像它是XML文件一样);
  • 字节顺序标记的存在;
  • 在UTF-8中存在不合法的字符; 要么
  • 声称是UTF-8编码的文件.

这些都不适用于我正在处理的文件.我在程序执行期间检查了字节数组形式的输入,它不包含BOM或任何非ASCII字符.

处理通过我的30kb文档的大约五分之一,然后崩溃在一个不起眼的英语句子上("不起眼",我的意思是所有字节都在32(空格)和122(小写z)之间;换句话说,标准键盘字符).假定有问题的元素的字节在这篇文章的末尾.

奇怪的是,失败的文档是通过从较大的文档中删除一些元素来生成的,这些元素被相同的代码干净地处理.

我知道异常是在parse(InputSource input)实现org.xml.saxXMLReader接口的对象的方法中引发的.根据Javadoc,SAXException表示

任何SAX异常,可能包含另一个异常.

检查调试器中的异常表明没有包装异常.

可能导致此错误的原因是什么?

编辑:

[60, 80, 97, 114, 97, 103, 114, 97, 112, 104, 62, 69, 120, 101, 99, 117, 116,
 105, 118, 101, 32, 83, 117, 109, 109, 97, 114, 121, 58, 32, 70, 114, 111, 109,
 32, 49, 55, 53, 52, 32, 116, 111, 32, 49, 55, 54, 51, 13, …
Run Code Online (Sandbox Code Playgroud)

java xml saxon schematron

5
推荐指数
1
解决办法
5870
查看次数

使用 XSLT 转换 XML 并保留 Unicode 字符

我的 XSLT 转换已经成功了几个月,直到我遇到带有 Unicode 字符(很可能是表情符号)的 XML 文件。我需要保留 Unicode,但 XSLT 正在将其转换为 HTML 实体。我认为将编码设置为 UTF-8 可以解决我的问题,但我仍然遇到问题。

任何帮助表示赞赏。代码:

private byte[] transform(InputStream stream) throws Exception{
    System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl"); 

    Transformer xmlTransformer;

    xmlTransformer = (TransformerImpl) TransformerFactory.newInstance().newTransformer(new   StreamSource(createXsltStylesheet()));
    xmlTransformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

    XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(stream,"UTF-8");
    Source staxSource = new StAXSource(reader, true); 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    Writer writer = new OutputStreamWriter(outputStream, "UTF-8");
    xmlTransformer.transform(staxSource, new StreamResult(writer));


    return outputStream.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)

如果我添加

xmlTransformer.setOutputProperty(OutputKeys.METHOD, "text");
Run Code Online (Sandbox Code Playgroud)

Unicode 被保留,但 XML 不被保留。

java xml xslt unicode utf-8

5
推荐指数
1
解决办法
4134
查看次数

用Java生成UTF-8编码的XML

这是我正在使用的代码

try {
String str = "\uC3BC and \uC3B6 and <&> für";

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("test");
root.setAttribute("attribute", str);
doc.appendChild(root);

DOMSource domSource = new DOMSource(doc);
// FileOutputStream out = new FileOutputStream("test.xml");
Writer out = new OutputStreamWriter(new FileOutputStream("test.xml"), "UTF8");

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.transform(domSource, new StreamResult(out));

out.close();
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

输出是

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<test attribute="? and ? and &lt;&amp;&gt; für"/>
Run Code Online (Sandbox Code Playgroud)

我希望它输出

attribute="&#xc3bc and &#xc3b6 …
Run Code Online (Sandbox Code Playgroud)

java xml encoding

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

xml ×5

java ×4

encoding ×3

oracle ×1

saxon ×1

scala ×1

schematron ×1

unicode ×1

utf-8 ×1

xslt ×1