实现domino server向指定的短信服务器IP地址发短信,已调通!但接收的中文有乱码,即:中文显示为“???”,请大家帮看下,如何解码成中文?非常感谢!import lotus.domino.*;
import java.net.*;   
import java.io.*;   
          
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
                         
               String urlStr="http://172.172.0.1/mobile/smssend/test.jsp?actiontype=SmsSend";
               String mobile="13800138000";
               String messages="ljh测试短信!";
               messages=java.net.URLEncoder.encode(messages);
               URL url = new URL(urlStr+"&mobile="+mobile+"&message="+messages);
               URLConnection connection = url.openConnection(); 
               connection.connect();
               InputStream out = connection.getInputStream();
               byte[] bytes = new byte[200];
               out.read(bytes);
               System.out.println(new String(bytes,"GBK"));
               System.out.println("OK!"); } catch(Exception e) {
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    java.net.URLEncoder.encode(messages,"GBK"); 
    OR
    java.net.URLEncoder.encode(messages,"UTF-8");
    OR
    java.net.URLEncoder.encode(messages,"ISO-8859-1"); 
     
      

  2.   

    byte[]   bytes   =   new   byte[200]; 
    out.read(bytes); 
    System.out.println(new String(bytes,connection.getContentEncoding()));// 用反馈回来的编码,也许不是GBK呢
     
      

  3.   

    java.net.URLEncoder.encode(messages,"GBK"); 
    OR
    java.net.URLEncoder.encode(messages,"UTF-8");
    OR
    java.net.URLEncoder.encode(messages,"ISO-8859-1"); 编译失败:java.net.URLEncoder.encode(messages); //可以通过??
      

  4.   

    不要用byte[]去寄存汉字,那样的汉字其实已经抛弃了高8位,试试以char的形式来读取
      

  5.   

    byte[]   bytes   =   new   byte[2048]; // 缓冲大一些 
    int len = out.read(bytes); 
    System.out.println(new String(bytes,0,len,connection.getContentEncoding()));// 用反馈回来的编码,也许不是GBK呢用这个编码读取看看。java.net.URLEncoder.encode(messages,"GBK");   
    需要抛出 UnsupportedEncodingException 
    ,当然你catch到也行
      

  6.   

    java.net.URLEncoder.encode(String, String)的第二个参数指定CharSet,是必须的吧。
    这里编码以及后面解码的时候都指定后试试看。
      

  7.   

    Java codebyte[]   bytes   =   new   byte[2048]; // 缓冲大一些 
    int len = out.read(bytes); 
    System.out.println(new String(bytes,0,len,connection.getContentEncoding()));// 用反馈回来的编码,也许不是GBK呢用这个编码读取看看。 java.net.URLEncoder.encode(messages,"GBK");       
    需要抛出   UnsupportedEncodingException   
    ,当然你catch到也行编译通过,但是执行报一大堆错!!!
      

  8.   

    先搞清楚一个问题
    但接收的中文有乱码,即:中文显示为“???”,到底是你发出去后,对方接收的是乱码,还是你从那面读取消息,拿到的 byte[] 转为String后是乱码?哈哈!
      

  9.   

    感谢老紫竹,是手机收到的信息中文显示为“???”字符、数字正常!
    请帮忙!!我对JAVA很不熟悉!
      

  10.   

    test.jsp? 接收什么编码,你就转换为什么编码发过去
    java.net.URLEncoder.encode(messages,"GBK");   一定用这个方法编码,GBK改为你的test.jsp接受的编码,也许是utf-8
      

  11.   

    用的是Domino server下的JDK,无法获知对方接收的是什么格式,只能试!
    现在的问题可能就是:java.net.URLEncoder.encode(messages,"GBK"); 如您所说,需要抛出UnsupportedEncodingException,当然catch到也行,
    但是Domino Server JDK好象出不去呀,也许是我自己写错了。
    您能告诉我怎么写吗?真的很感激您!
      

  12.   

    public class JavaAgent extends AgentBase {
      public void NotesMain() {
        try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();
          // (Your code goes here)      String urlStr = "http://172.172.0.1/mobile/smssend/test.jsp?actiontype=SmsSend";
          String mobile = "13800138000";
          String messages = "ljh测试短信!";
          messages = java.net.URLEncoder.encode(messages,"GBK"); // 改这里就可以,GBK,GB2312,UTF-8 逐个试一下
          URL url = new URL(urlStr + "&mobile=" + mobile + "&message=" + messages);
          URLConnection connection = url.openConnection();
          connection.connect();
          InputStream out = connection.getInputStream();
          byte[] bytes = new byte[200];
          out.read(bytes);
          System.out.println(new String(bytes, "GBK"));
          System.out.println("OK!");    } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
      

  13.   

    http://172.172.0.1/mobile/smssend/test.jsp
    这个程序难道不是你编写的?????
    你没有源代码?把最前面的几行贴出来看看
      

  14.   

    http://172.172.0.1/mobile/smssend/是服务商提供的,没有原代码、只有接口;
    改为:messages = java.net.URLEncoder.encode(messages,"GBK"); 后无法编译,
    提示:方法中参数数量错误!需要抛出,请问如何做呢?
    谢谢!!!
      

  15.   

    能方便告诉我下您联系方式吗?MSN、QQ都可以,当然如果您愿意的话!
      

  16.   

    01/08/2008 18:12:14   Closed session for admin/zghx|Databases accessed:     1   Documents read:     0   Documents written:     0
    01/08/2008 18:18:32   HTTP JVM: ????[????13801378537??????ljh222????2!]??????08010818180101/08/2008 18:18:32   HTTP JVM: OK!
    01/08/2008 18:18:32   HTTP JVM: Error cleaning up agent threads
    01/08/2008 18:27:43   HTTP JVM: ????[????13801378537??????ljh222????2!]??????08010818270101/08/2008 18:27:43   HTTP JVM: OK!
    01/08/2008 18:28:17   HTTP JVM: Error loading Agent Class: JavaAgent
    01/08/2008 18:28:17   HTTP JVM: java.lang.ClassNotFoundException: JavaAgent
    01/08/2008 18:28:17   HTTP JVM:  at lotus.domino.AgentLoader.loadClass(Unknown Source)
    01/08/2008 18:28:17   HTTP JVM:  at java.lang.ClassLoader.loadClass(ClassLoader.java:446)
    01/08/2008 18:28:17   HTTP JVM:  at lotus.domino.AgentLoader.runAgent(Unknown Source)后台报错信息。
      

  17.   

    String str = new String("中文".getBytes("iso8859-1"),"gb2312")
      

  18.   

    问题终于解决!
    将:messages = java.net.URLEncoder.encode(messages,"GBK"); 
    换:messages=new String(messages.getBytes("GBK"),"ISO-8859-1");
    就成功了!感谢大家的支持!尤其是老紫竹!
      

  19.   

    你用的是lotus   domino 什么版本啊!  很有可能是版本问题!  我朋友以前好像遇见过这样的问题!