繁体   English   中英

读取 ASCII 编码 XML 并保存为 UTF-8 时出现问题

[英]Problem reading ASCII encoded XML and saving as UTF-8

我有一个 java 应用程序,它读取一些定义为具有 ASCII 编码的 XML 数据。 我通过 SAXReader 读取数据,以便可以将 XML 解析为文档。 最后,我将 XML 保存为字符串,然后将其保存到 MySQL 数据库中。 我遇到的问题是保存到数据库失败并出现以下错误: SQL state [HY000]; 错误代码[1366]; 不正确的字符串值:第 1 行的列 'p_xml_data' 的 '\xEF\xBC\x93con...'

我在找出失败的原因时遇到问题,但我假设它与编码类型有关。 数据库表/列定义为 UTF-8。

这是我正在使用的代码片段:

    final URL url = new URL(feedUrl);
    final SAXReader reader = new SAXReader();
    reader.setValidation(false);
    reader.setIgnoreComments(true);

    Document document = reader.read(url);
    Document savedDocument = document;

    processXml(document.getRootElement());

    String xml = document.asXML().replaceAll("\\s+\n", "");

    feed.setXmlData(xml);

    // now we have the basic XML, lets save it
    feed = getSonyPSNModule().save(feed);

这是一些传入的 XML,尽管这是从文档 object 中的调试器中获取的。

    <?xml version="1.0" encoding="ASCII"?>
    <rss xmlns:dc="http://purl.org/dc/elements/1.1/" >
  <channel>
    <title>Name.com - Name&#xae;3 Games</title>
    <link>http://test.com</link>
    <description>Name.com - Name&#xae;3 Games</description>
    <title>Assassin's Creed&#x2122;</title>

奇怪的是标题中有撇号,但商标字符编码为 &xae;

有谁知道这里发生了什么? 我一直在尝试各种方法并尝试在各个点更改编码类型,但无济于事。

这里希望其他人遇到这个问题并解决它!

所以你想改变编码。 字节本身不应更改,因为 UTF-8 是 ASCII 的超级字符集。

我会更改原始文本以更改编码并删除换行符。

来自 Java 文档:

String 表示 UTF-16 格式的字符串... http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.ZFC35FDC70D5FC69D269873A82ZE2

因此,假设您尝试在此处的数据库中保存一个字符串,它类似于: UTF-8 (XML) -> UTF-16 (Java String) -> UTF-8 (Database) 最后一步是现在出错的地方。 您要么必须将该字符串转换为 UTF-8。 使用 String object 构造函数之一应该可以工作: new String(oldString.getBytes("UTF-8"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM