2013-07-03 3 views
0

우리 응용 프로그램에서 특수 문자가 제대로 나오도록하기 위해 많은 시간을 보냈습니다. 우리의 공급자는 "GSM0338, 일명 ISO-8859"를 사용하라고 말했습니다. 나에게 이것은 스페인어 문자를 원하기 때문에 ISO-8895-1을 의미합니다.특수 문자를 통해 오는? SMPP 및 Java에서

흐름은 : (나는 잠시 동안이 주변에 연주 한 이후, 모든 것을 말하는.)

  1. 사용 메모장 ++ UTF-8 인코딩으로 메시지 파일을 만들 수 있습니다. (ISO-8859-1로 저장하는 옵션 없음). 변환하고 새 파일을 기록하는 빠른 자바 프로그램을 통해 각 파일을 보낸

  2. :

    String text = readTheFile(....); 
    
    output = text.getBytes("ISO-8859-1"); 
    FileOutputStream fos = new FileOutputStream(filesPathWithoutName + "\\converted\\" + filename); 
    fos.write(output); 
    fos.close(); 
    
  3. 다른 프로젝트에서

    SMPP 테스트 클래스는이 파일을 읽고

  4. :

    private static String readMessageFile(final String filenameOfFirstMessage) throws IOException { 
    
        BufferedReader br = new BufferedReader(new FileReader(filenameOfFirstMessage)); 
        String message; 
    
        try { 
         StringBuilder sb = new StringBuilder(); 
         String line = br.readLine(); 
    
         while (line != null) { 
          sb.append(line); 
          sb.append("\n"); 
          line = br.readLine(); 
         } 
         message = sb.toString(); 
        } finally { 
         br.close(); 
        } 
    
        return message; 
    } 
    
  5. 통화가

    보내기
    public void send(final String message, final String targetPhone) throws MessageException { 
        SmppMessage smppMessage = toSmppMessage(message, targetPhone); 
        smppSmsService.sendMessage(smppMessage); 
    } 
    
    private SmppMessage toSmppMessage(final String message, final String targetPhone) { 
        SmppMessage smppMessage = new SmppMessage(); 
        smppMessage.setMessage(message); 
        smppMessage.setRecipientAddress(toGsmAddress(targetPhone)); 
        smppMessage.setSenderAddress(getSenderGsmAddress()); 
        smppMessage.setMessageType(SmppMessage.MSG_TYPE_DATA); 
        smppMessage.setMessageMode(SmppMessage.MSG_MODE_SAF); 
        smppMessage.requestStatusReport(true); 
        return smppMessage; 
    } 
    

문제점 : 문자가 포함 된 SMS는 배달되지만 이러한 문자는 물음표로 표시됩니다.

구성 :

smpp.smsc.charset=ISO-8859-1 
smpp.data.coding=0x03 

은 물론이 어떤 도움을 크게 감상 할 수있다. 읽어 주셔서 감사합니다.

답변

5

음, 공급자가 잘못되었습니다. GSM 03.38ISO-8859-1이 아닙니다. 그것들은 "Z"(0x5A)를 통해 동일하지만 그 이후에는 서로 엇갈립니다. 예를 들어 GSM 03.38에서 ñ는 0x7D이고 ISO-8859-1에서는 0xF1입니다. GSM 03.38은 7 비트 코드이므로 0x7F 이상은 "?"로 나오게됩니다. 0x5A 이후의 내용은 예상치 못한 것으로 나옵니다.

Java는 일반적으로 GSM 03.38을 지원하지 않으므로 수동으로 디코딩해야합니다. 할 너무 어려운해서는 안되며, 소프트웨어의 다음 조각은 이미 당신이 필요의 대부분을 할 수 있습니다

또한 GSM 03.38 및 유니 코드 유용한 사이 this translation table을 찾을 수 있습니다.

관련 문제