这是我的代码我试图通过SMTP发送邮件但作为输出?即将到来:
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());
}
}
答案 0 :(得分:2)
你的问题在这里:
String strMessage="Pour se désinscrire du service TT ZONE, envoyez GRATUITEMENT « DTTZ » ";
String utf8 = new String(strMessage.getBytes("UTF-8"));
为什么你完全?由于UCS2Encoding
类接受String
作为参数,因此它将处理编码本身。
只是做:
sm.setMessageText(strMessage);
正如我在你提出的另一个问题中所提到的,你正在混合很多概念。提醒String
是一系列char
s;它独立于您使用的编码。内部Java使用UTF-16的事实在这里完全无关紧要。它可以使用UTF-32或EBCDIC,甚至使用载体鸽,这个过程本身也不会改变:
encode decode
String (char[]) --------> byte[] --------> String (char[])
通过使用String
构造函数将字节数组作为参数,您使用默认的JVM编码从这些字节创建char
s的序列。哪个可能是,也可能不是,是UTF-8。
特别是,如果您使用的是Windows,则默认编码为windows-1252。让我们用charset名称替换上面的encode
和decode
。你做的是:
UTF-8 windows-1252
String (char[]) -------> byte[] --------------> String (char[])
“休斯顿,我们遇到了问题!”
有关详细信息,请参阅Charset
,CharsetEncoder
和CharsetDecoder
的javadoc。