- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 DOM4j
来解析和编写始终采用 UTF-8 格式的 XML 树。
我的 XML 文件包含德语特殊字符。解析它们不是问题,但是当我将树写入文件时,特殊字符被转换为 � 字符。
我无法更改 XML 文件的编码,因为它仅限于 UTF-8。
代码
SAXReader xmlReader = new SAXReader();
xmlReader.setEncoding("UTF-8");
Document doc = xmlReader.read(file);
doc.setXMLEncoding("UTF-8");
Element root = doc.getRootElement();
// manipulate doc
OutputFormat format = new OutputFormat();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileWriter(file), format);
writer.write(doc);
writer.close();
预期输出
...
<statementText>This is a test!Ä Ü ß</statementText>
...
实际输出
...
<statementText>This is a test!� � �</statementText>
...
最佳答案
您正在将 FileWriter
传递给 XMLWriter
。 Writer
已经处理了 String
或 char[]
数据,所以它已经处理了编码,这意味着 XMLWriter
没有机会影响它。
另外 FileWriter
是一个特别有问题的 Writer
类型,因为您永远无法指定它应该使用哪种编码,而是它总是使用平台默认编码(这通常是什么例如 Windows 上的 ISO-8859-1 和 Linux 上的 UTF-8)。出于这个原因,它基本上不应该被使用。
要让 XMLWriter
应用作为配置给定的内容,请将 OutputStream
传递给它(它处理 byte[]
)。此处使用的最明显的一个是 FileOutputStream
:
XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
这甚至记录在 JavaDoc for XMLWriter
中:
Warning: using your own Writer may cause the writer's preferred character encoding to be ignored. If you use encodings other than UTF8, we recommend using the method that takes an OutputStream instead.
可以说警告有点误导,因为即使您打算写入 UTF-8 数据,Writer
也可能有问题。
关于java - DOM4J utf-8 编码 Umlaute(Ä,ü,ß) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50910594/
我检索一个流。一切正常,但 Umlaute (ä,ö,ü,ß) 的编码除外。 什么是 NäüßÖ´sas so viele Umlaute 成为 NäüÃôsas so viele Umlau
我需要比较德语语言中的两个字符串,以检查它们是否相等并且仅在元音变音的使用上有所不同。例如。 “Jörg”应与“Joerg”相同。 所以我尝试了: var ci = new CultureInfo("
这个问题在这里已经有了答案: Character-encoding problem with string literal in source code (1 个回答) 3个月前关闭。 我正在尝试编写
我有一个从 sqlite 数据库获取数据(国家/地区列表)的应用程序。这些国家/地区采用德语并包含变音符号,例如 Österreich。我想获取按名称排序的国家/地区,并希望 Österreich 靠
我正在尝试“尝试”一些 REST API 和 Java 代码。 因为我主要使用德语,所以我已经设法让 Apache HTTP 客户端使用 UTF-8 编码,以确保以正确的方式处理“元音变音”。 我仍然
我在使用 openxml 时遇到字符元音变音的问题。字符串中的每个字符都使用 Arial,但 ä 使用 Calibri。我真的不知道为什么。 有人可以帮助我吗? 这是我的代码: Doc
我在 C++ 中遇到“元音变音”(字母 ä、ü、ö、...)和 ifstream 的问题。 我使用 curl 下载 html 页面,使用 ifstream 逐行读取下载的文件并解析其中的一些数据。一切
months = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktob
我正在使用带有简单直接代码的 symfony,试图将任何特殊字符(如 ä Ä ö Ö ü Ü)更改为 a A o O u U。我尝试了所有我能找到的方法 归一化器 echo \Normalizer::
这有效: echo preg_replace("/TesT/i","FOUND","TEST"); // works as expected prints FOUND 为什么下面这个不起作用?在我的项
这有效: echo preg_replace("/TesT/i","FOUND","TEST"); // works as expected prints FOUND 为什么下面这个不起作用?在我的项
我对 JSoup 库的编码行为有一些疑问。 我想解析网页的内容,因此我必须插入一些人名,其中还可以包含德语变音符号如 ä、ö 等。 这是我使用的代码: doc = Jsoup.parse(new UR
我知道如何使用(简单的)key=function 自定义排序。但是,如果我需要更复杂的 key= 函数,该怎么做。我在整理它时遇到了问题。 这是片段:在第一个示例中,我使用 key=locale.st
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C++ source in unicode 刚刚在项目中发现了这行代码: string überwachun
我有以下 XML: Brandenburg Brandenburg Brandenburg
我想使用\w 通配符过滤字符串,但遗憾的是它不包含变音符号。 $i = "Die Höhe"; $x = preg_replace("/[^\w\s]/","",$i); echo $x; //
我有一个看起来像这样的字符串,例如 Lübeck Nürnberg Österreich 和“Umlaute”。 现在我想拆分它并在字符串上添加新的“单词”,如下所示Lübeck Nürnberg Ö
这个问题在这里已经有了答案: How to pass Unicode characters as JSP/Servlet request.getParameter? (5 个答案) 关闭 6 年前。
这个问题在这里已经有了答案: How to pass Unicode characters as JSP/Servlet request.getParameter? (5 个答案) 关闭 6 年前。
有人遇到过这个奇怪的问题吗? 我似乎无法在 FullCalendar.io 中覆盖此格式。 我只是想使用破折号(“-”)而不是 umlaut 'W'。 当前代码如下: header: { le
我是一名优秀的程序员,十分优秀!