0

这是我试图通过 SMPP 发送消息但作为输出的代码?来了:

public class Encoding 
{
public static void main(String[] args) throws SocketTimeoutException, AlreadyBoundException, VersionException, SMPPProtocolException, UnsupportedOperationException, IOException 
{
SubmitSM sm=new SubmitSM();
String strMessage="Pour se désinscrire du service TT ZONE, envoyez GRATUITEMENT « DTTZ » ";
String utf8 = new String(strMessage.getBytes("UTF-8"));
UCS2Encoding uc = UCS2Encoding.getInstance(true);
sm.setDataCoding(2);
sm.setMessageText(utf8);
System.out.println(sm.getMessageText());
}
}
4

1 回答 1

2

你的问题在这里:

String strMessage="Pour se désinscrire du service TT ZONE, envoyez GRATUITEMENT « DTTZ » ";
String utf8 = new String(strMessage.getBytes("UTF-8"));

为什么要这么做?由于UCS2Encoding该类接受 aString作为参数,因此它将处理编码本身。

做就是了:

sm.setMessageText(strMessage);

正如我在你问的另一个问题中提到的那样,你混合了很多概念。提醒一下aStringchars的序列;它与您使用的编码无关。Java 内部使用 UTF-16 的事实在这里完全无关紧要。它可以使用 UTF-32 或 EBCDIC,甚至使用信鸽,过程本身不会改变:

                 encode           decode
String (char[]) --------> byte[] --------> String (char[])

通过使用将String字节数组作为参数的构造函数,您可以使用默认的 JVM 编码从这些字节创建一个chars 序列。这可能是也可能不是UTF-8。

特别是,如果您使用的是 Windows,则默认编码将为 windows-1252。让我们用字符集名称替换encode和上面。decode你要做的是:

                 UTF-8           windows-1252
String (char[]) -------> byte[] --------------> String (char[])

“休斯顿,我们有一个问题!”

Charset有关更多详细信息,请参阅 和 的CharsetEncoderjavadocs CharsetDecoder

于 2014-03-21T12:14:52.077 回答