我花了很多时间试图让特殊字符在我们的应用程序中正确通过。我们的供应商告诉我们使用“GSM0338,也称为 ISO-8859”。对我来说,这意味着 ISO-8895-1,因为我们需要西班牙语字符。
流程:(告诉你一切,因为我已经玩了一段时间了。)
使用 notepad++ 以 UTF-8 编码创建消息文件。(没有保存为 ISO-8859-1 的选项)。
通过一个转换和写入新文件的快速 Java 程序发送每个文件:
String text = readTheFile(....); output = text.getBytes("ISO-8859-1"); FileOutputStream fos = new FileOutputStream(filesPathWithoutName + "\\converted\\" + filename); fos.write(output); fos.close();
另一个项目中的 SMPP 测试类读取这些文件:
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; }
通话发送
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; }
问题: 发送包含字母ñ í ó 的短信,但这些字母显示为问号。
配置:
smpp.smsc.charset=ISO-8859-1
smpp.data.coding=0x03
非常感谢您对此的任何帮助。非常感谢您的阅读。