posts - 241,  comments - 116,  trackbacks - 0

                  最近在嘗試使用ActiveMQ做系統間的繼承,當然少不了Java和C++客戶端的交互問題。由于Java與C++在字符串上采用了不同方式的編碼 (Java-Unicode, C++ - ascii)造成了文本數據傳輸過程中的編碼問題, 下面記錄一下解決方

          環境:

          C++ 端:

          操作系統:         Win7

          JMS客戶端:     CMS 1.0 (新版本的CMS需要VS2008編譯)

          開發環境:         VS2005

                    Java端:

                             操作系統:          WinXp

                             JMS客戶端:       ActiveMQ5.4.1-Core

                             開發環境:           JDK1.6.22

                    ActiveMQ:

                             ActiveMQ 5.4.1


          解決方法:

                  根據JMS API對Message類別的定義,最適合多語言見交互的Message類型應該是BytesMessage和TextMessage。由于 BytesMessage的readUTF方法在CMS1.0中,接收Java端發出的UTF字符時會拋出異常,導致BytesMessage不好使用;壞賬

                  TextMessage中,無論C++端以哪種格式的數據setText() , Java端接收到的數據都是以ISO-8859-1 格式編碼的字符。所以統一在發送和接收時都采用 ISO-8859-1 的方式進行數據傳輸

          發送時的代碼:

              private void writeTextMessage(String txt) {
                  try {
                      String msg = txt;        
                                  
                      String iso = new String(txt.getBytes("GBK"), "ISO-8859-1");
                      
                      TextMessage message = pubSession.createTextMessage();
                      message.setStringProperty("language", "java");
                      message.setText(iso);
                      
                      pub.publish(message);
                      
                  } catch (JMSException e) {
                      e.printStackTrace();
                  } catch (UnsupportedEncodingException e) {
                      e.printStackTrace();
                  }
              }

          接收時的代碼:

              private void onTextMessage(TextMessage message) throws JMSException {
                  String txt = message.getText();
                  
                  try {
                      String gbk = new String(txt.getBytes("ISO-8859-1"), "GBK");
                      System.out.println(gbk);
                  } catch (UnsupportedEncodingException e) {
                      e.printStackTrace();
                  }
              }

          posted on 2011-05-06 10:15 墻頭草 閱讀(6157) 評論(5)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 邻水| 舟山市| 封丘县| 忻城县| 新宁县| 潮安县| 南阳市| 应用必备| 长阳| 泌阳县| 揭阳市| 大理市| 沐川县| 西和县| 榆中县| 恩平市| 宿州市| 葫芦岛市| 政和县| 井研县| 南雄市| 上虞市| 万安县| 读书| 大渡口区| 界首市| 昂仁县| 吉安市| 陆良县| 鄂伦春自治旗| 普格县| 济源市| 万宁市| 灵台县| 嘉祥县| 浦县| 鹤峰县| 成都市| 屏山县| 米脂县| 荔浦县|