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クラスはString引数として a を受け入れるため、エンコーディング自体を処理します。

ただ行う:

sm.setMessageText(strMessage);

あなたが尋ねた他の質問で述べたように、あなたは多くの概念を混ぜ合わせています。aStringchars のシーケンスであることを思い出してください。使用するエンコーディングとは無関係です。Java が内部的に UTF-16 を使用しているという事実は、ここではまったく関係ありません。UTF-32 や EBCDIC を使用したり、伝書鳩を使用したりすることもできますが、プロセス自体は変わりません。

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

またString、バイト配列を引数として受け取るコンストラクターを使用することにより、デフォルトの JVM エンコーディングを使用して、これらのバイトから一連の s を作成しcharます。UTF-8 である場合とそうでない場合があります。

特に、Windows を使用している場合、デフォルトのエンコーディングは windows-1252 になります。encode以上をdecode文字セット名に置き換えましょう。あなたがすることは次のとおりです。

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

「ヒューストン、問題が発生しました!」

詳細については、CharsetCharsetEncoderおよびの javadoc を参照してくださいCharsetDecoder

于 2014-03-21T12:14:52.077 に答える