当前位置: 首页 > 知识库问答 >
问题:

将DOM元素编码从CP1251转换为UTF-8

陶成济
2023-03-14

我有一个简单的服务器端代码,它接受请求xml并将其作为字符串插入Oracle数据库Clob列。问题是客户端发送带有CP1251编码文本的请求xml,但我需要使用UTF-8编码将其插入Oracle。现在我用于CP1251的代码是:

        Element soapinElement = (Element) streams.getSoapin().getValue().getAny();  //retrieve request xml      
        Node node = (Node) soapinElement;
        Document document = node.getOwnerDocument();
        DOMImplementationLS domImplLS = (DOMImplementationLS) document.getImplementation();         
        LSSerializer serializer = domImplLS.createLSSerializer();
        LSOutput output = domImplLS.createLSOutput();
        output.setEncoding("CP1251");
        Writer stringWriter = new StringWriter();
        output.setCharacterStream(stringWriter);
        serializer.write(document, output);
        String soapinString = stringWriter.toString();

此代码识别CP1251中编码的文本。这项任务是使用UTF-8编码的可读文本进行相同的操作。请提出任何意见。

我尝试了这个,但它产生了不可读的字符,而不是西里尔:

        Element soapinElement = (Element)   streams.getSoapin().getValue().getAny();            
        Node node = (Node) soapinElement;
        Document document = node.getOwnerDocument();
        DOMImplementationLS domImplLS = (DOMImplementationLS) document.getImplementation();         
        LSSerializer serializer = domImplLS.createLSSerializer();
        LSOutput output = domImplLS.createLSOutput();
        output.setEncoding("CP1251");
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        output.setByteStream(byteArrayOutputStream);
        serializer.write(document, output);
        byte[] result = byteArrayOutputStream.toByteArray();
        InputStream is = new ByteArrayInputStream(result);
        Reader reader = new InputStreamReader(is, "CP1251");
        OutputStream out = new ByteArrayOutputStream();
        Writer writer = new OutputStreamWriter(out, "UTF-8");
        char[] buffer = new char[10];
        int read;
        while ((read = reader.read(buffer)) != -1) {
            writer.write(buffer, 0, read);
        }           
        reader.close();
        writer.close();
        String soapinString = out.toString();

共有1个答案

韶和璧
2023-03-14

您可以解码CP1251字符集数据如下

Charset utf8charset = Charset.forName("UTF-8");
Charset cp1251charset = Charset.forName("CP1251");

// decode CP1251
        CharBuffer data = cp1251charset.decode(ByteBuffer.wrap(result));

编码为UTF-8字符集

// encode UTF-8
        ByteBuffer outputBuffer = utf8charset.encode(data);

并将ByteBuffer转换为byte[]

// UTF-8 Value        
        byte[] outputData = outputBuffer.array();

这可能会解决你的问题。

 类似资料:
  • 本文向大家介绍PHP 将ASCII转换为UTF-8编码,包括了PHP 将ASCII转换为UTF-8编码的使用技巧和注意事项,需要的朋友参考一下 如果我们知道当前的编码是ASCII,则可以使用'iconv'函数将ASCII转换为UTF-8。原始字符串可以作为参数传递给iconv函数,以将其编码为UTF-8。 示例 具有特殊字符的字符串被分配给'str'变量。它以当前所在的编码以及需要转换为的编码传递

  • 问题内容: 有没有办法像这样转换HTML: 或任何其他HTML字符串插入DOM元素?(以便我可以使用appendChild())。我知道我可以执行.innerHTML和.innerText,但这不是我想要的-我确实希望能够将动态HTML字符串转换为DOM元素,以便可以在.appendChild()中传递它。 更新:似乎有些混乱。我将HTML内容放在字符串中,作为JavaScript中变量的值。该文

  • 问题内容: 我需要将文本文件转换为String,最后,我应该将其作为输入参数(类型InputStream)放入IFile.create(Eclipse)。寻找示例或方法,但仍然不知道…需要您的帮助! 只是为了测试,我确实尝试将原始文本文件转换为使用此代码编码的UTF-8 但即使以为最终的* .test.txt文件具有UTF-8编码,里面的字符也已损坏。 问题答案: 您需要使用参数指定的编码。 这也

  • 我需要将多个CSV文件(使用不同的编码)转换为UTF-8。 这是我的代码: 当我尝试运行此代码时,我得到以下错误: UnicodeDecodeError:'utf-8'编解码器无法解码位置5057的字节0xf3:无效的延续字节 有人能帮我吗?谢谢

  • 在我的Silverlight应用程序中,我得到了一个用windows-1252编码的XML文件。现在我的问题,它不会正确显示,直到Windows-1252字符串转换为UTF8字符串。在一个正常的C#环境中,这不会是一个大问题:在那里我可以做这样的事情: (将字符串的字符编码从windows-1252转换为utf-8) 但是silverlight不支持windows-1252,它只支持unicode

  • 问题内容: 有没有办法像这样转换HTML: 或任何其他HTML字符串插入DOM元素?(以便我可以使用appendChild())。我知道我可以执行.innerHTML和.innerText,但这不是我想要的- 我确实希望能够将动态HTML字符串转换为DOM元素,以便可以在.appendChild()中传递它。 更新:似乎有些混乱。我将HTML内容放在字符串中,作为JavaScript中变量的值。该