Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;1字节UTF-8序列的无效字节1“;在.jar中发布xml而不是在eclpise中发布xml时发生_Java_Xml_Eclipse_Encoding_Utf 8 - Fatal编程技术网

Java &引用;1字节UTF-8序列的无效字节1“;在.jar中发布xml而不是在eclpise中发布xml时发生

Java &引用;1字节UTF-8序列的无效字节1“;在.jar中发布xml而不是在eclpise中发布xml时发生,java,xml,eclipse,encoding,utf-8,Java,Xml,Eclipse,Encoding,Utf 8,我遇到了一个困难,我读了很多关于“1字节UTF-8序列的无效字节1”的文章,比如 , . 但这并不能解决我的问题 我有一个web应用程序(生活在paas云中),它可以很好地处理来自移动客户端的请求(不是我自己开发的) 为了测试服务器应用程序,我基于Swing编写了一个客户端应用程序(比如说测试客户端),通过HTTP将xml数据发布到我的服务器 奇怪的问题是,当我在eclipse中运行这个测试客户机时,它可以很好地提交帖子并从服务器获取消息 但当我将其导出到Runnable jar中时,在我的服务

我遇到了一个困难,我读了很多关于“1字节UTF-8序列的无效字节1”的文章,比如 , . 但这并不能解决我的问题

我有一个web应用程序(生活在paas云中),它可以很好地处理来自移动客户端的请求(不是我自己开发的)

为了测试服务器应用程序,我基于Swing编写了一个客户端应用程序(比如说测试客户端),通过HTTP将xml数据发布到我的服务器

奇怪的问题是,当我在eclipse中运行这个测试客户机时,它可以很好地提交帖子并从服务器获取消息

但当我将其导出到Runnable jar中时,在我的服务器日志中发现异常,“
org.dom4j.DocumentException:1字节UTF-8序列的无效字节1。嵌套异常:1字节UTF-8序列的无效字节1。
”当我发布一些xml数据包含汉字时

我相信这与我的计算机和eclipse之间的编码差异有关

请注意

1.我没有要读取的xml,而是从一个对象构造xml数据

2.我的常规/首选项/工作区编码为UTF-8。我有
request.setCharacterEncoding(“UTF-8”)在我的doPost中

3.我希望修改我的测试客户端代码,使其能够正常工作,因为服务器现在在移动用户的生产环境中工作正常

下面是我如何发布xml数据的

        URL url = new URL(address);
        URLConnection uc = url.openConnection();
        HttpURLConnection conn = (HttpURLConnection) uc;
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-type", "text/xml");
        System.out.println("before POST:\n"+xmlstr);
        PrintWriter pw = new PrintWriter(conn.getOutputStream());
        pw.write(xmlstr);
        pw.close();
xmlstr来自下面

(RequestTextMessage是一个非常简单的类,只有getter,该类的一个字段将接受输入字符串,可能是中文):


您需要选择您的
PrintWriter
使用的编码。在Eclipse之外,您的平台可能默认为UTF-8以外的其他版本

请尝试以下代码:

PrintWriter pw = new PrintWriter(new OutputStreamWriter(
    conn.getOutputStream(), "UTF-8"));

Plus
conn.setRequestProperty(“内容类型”、“文本/xml;字符集=UTF-8”)这可能是多余的,因为这似乎是在别处配置的。非常感谢!!它现在似乎可以工作了,我将尝试将其转换为exe并重试。实际上,在得到您的答案之前,我已经尝试了以下4种方法:1.xmlstr=URLEncoder.encode(xmlstr,“utf-8”);2.chineseContent=URLEncoder.encode(chineseContent,“utf-8”);3.conn.setRequestProperty(“接受字符集”、“utf-8”);4.conn.setRequestProperty(“contentType”、“utf-8”);他们帮不上忙,有些甚至让事情变得更糟!。你能帮我解释一下你的答案和我的尝试有什么不同吗?@Jaskey我不是这些课程的专家,但我建议:1。这将转义汉字,但并不等同于创建UTF-8字符串。2.同样的事情。3.不确定。4.看起来这是在宣传你的文本是UTF-8,但实际上并没有导致它是UTF-8编码的。@Duncan,谢谢!我尝试在exe文件,它的工作也。我有一个问题,当我们使用response.setCharacterEncoding(“UTF-8”);当我使用response.getWriter()时,我将得到一个UTF-8编码的printwriter;
at java.lang.Thread.run(Thread.java:724)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at wodinow.weixin.jaskey.co.CoreServlet.doPost(CoreServlet.java:161)
at wodinow.weixin.jaskey.service.CommandService.generateResponseXML(CommandService.java:76)
at wodinow.weixin.jaskey.util.MessageUtil.parseXml(MessageUtil.java:52)
at org.dom4j.io.SAXReader.read(SAXReader.java:335)
at org.dom4j.io.SAXReader.read(SAXReader.java:439)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2947)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanCDATASection(XMLDocumentFragmentScannerImpl.java:1614)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanData(XMLEntityScanner.java:1252)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1753)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:557)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
Nested exception:
at java.lang.Thread.run(Thread.java:724)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at wodinow.weixin.jaskey.co.CoreServlet.doPost(CoreServlet.java:161)
at wodinow.weixin.jaskey.service.CommandService.generateResponseXML(CommandService.java:76)
at wodinow.weixin.jaskey.util.MessageUtil.parseXml(MessageUtil.java:52)
at org.dom4j.io.SAXReader.read(SAXReader.java:335)
at org.dom4j.io.SAXReader.read(SAXReader.java:458)
org.dom4j.DocumentException: Invalid byte 1 of 1-byte UTF-8 sequence. Nested exception:     Invalid byte 1 of 1-byte UTF-8 sequence. 
PrintWriter pw = new PrintWriter(new OutputStreamWriter(
    conn.getOutputStream(), "UTF-8"));