有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javax。xml。使改变TransformerFactory Unicode问题Java

我们无法正确转换Unicode字符。我们以XML格式提供输入,当我们试图转换时,我们无法返回原始字符串

这就是我使用的代码

StringCarrier OStringCarrier = new StringCarrier();
String SXmlFileData= "<export_candidate_response><criteria><output><lastname>Bhagavath</lastname><firstname>ガネーシュ</firstname></output></export_candidate_response>";

String SResult = "";
 try
    {
      TransformerFactory tFactory = TransformerFactory.newInstance();
      Transformer transformer = tFactory.newTransformer(new StreamSource(SXslFileName));
      transformer.setOutputProperty(OutputKeys.ENCODING, "UTF8");
      OutputStream xmlResult = (OutputStream)new ByteArrayOutputStream();
      StreamResult outResult = new StreamResult(xmlResult);
      transformer.transform(new StreamSource(
          new ByteArrayInputStream(SXmlFileData.getBytes("UTF8"))),outResult);

      SResult = outResult.getOutputStream().toString();

      }
catch (TransformerConfigurationException OException)
    {
        //Exception has been thrown
        OException.printStackTrace();
        return OStringCarrier;
    }
     catch (TransformerException OException)
    {
        //Exception has been thrown
        OException.printStackTrace();
        return OStringCarrier;
    }
    catch (Exception OException)
    {
        //Exception has been thrown
        OException.printStackTrace();
        return OStringCarrier;
    }

这就是我得到的结果?取代ガネーシュ


共 (1) 个答案

  1. # 1 楼答案

    This is the output i'm getting ガãƒ?ーシュ in place of ガネーシュ

    这告诉你,在这个过程中的某个地方,UTF-8中的数据正在被一个软件读取,该软件认为它正在读取拉丁语-1。它没有告诉你的是在这个过程中发生了什么。所以你需要分而治之——你需要找到数据正确的最后一点

    首先确定问题是在转换之前还是之后。如果您使用的是XSLT 2.0处理器,那么这很容易:您可以使用`来查看XSLT处理器提供了什么字符串。使用1.0处理器有点棘手,但可以使用子字符串($in,$n,1)来提取第n个字符,这应该会给你一个线索

    我怀疑这是输入。首先,在Java字符串文本中放入非ASCII字符总是有点危险,因为如果您对所有配置都不十分小心,那么往返到源存储库很容易损坏代码。其次,如果字符串是正确的,那么使用StringReader读取它比将其转换为字节流要安全得多。尝试:

    transformer.transform(new StreamSource(
              new StringReader(SXmlFileData)),outResult);