1

文字列をUnicodeに変換すると、Java例外が発生します。

public static boolean sendOutgoingSms(String phoneNumber, String message,
            Context context) {
    try {
        PendingIntent pi = PendingIntent.getActivity(context, 0,
                new Intent(), 0);
        SmsManager sms = SmsManager.getDefault();
        message = Charset.forName("UTF-8").encode(message).toString();
        sms.sendTextMessage(phoneNumber, null, message, pi, null);
        return true;
    } catch (Exception ex) {
        Trace.e("Failed to send outgoing sms", ex);
    }
    return false;
}

エラー:

"java.nio.ReadWriteHeapByteBuffer, status: capacity=8 position=0 limit=4"

Charset、forNameを間違った方法で使用していますか?

4

1 に答える 1

1

内部の文字列は Unicode です。ここでの唯一の問題は、Java ソース ファイルが複数のエンコーディングである可能性があることです。そのため、文字列定数のようなもの"hi"は、javac コンパイラによって異なる方法でエンコードされる可能性があります。

エディタコンパイラが同じエンコーディングを使用していることを確認してください。国際的なプロジェクトには UTF-8 が最適です。Mavenのようなビルド インフラストラクチャを使用している場合は、そこで明示的に宣言できます。

それならString message = "eĥoŝanĝo ĉiuĵaŭde";大丈夫です。

Java ツールのnative2asciiを使用して特殊文字をエンコードできるため、Java ソースは純粋な ASCII です。

Windows Latin-1 から\uXXXXu-encoding に変換します (ASCII は残ります)。

native2ascii -encoding windows-1252 A.java temp.txt

Java を UTF-8 に逆エンコードします。

native2ascii -reverse -encoding UTF-8 temp.txt A.java

質問に追加した後、特殊文字の問題はSMS部分にあると思います。成功は、プロバイダーと受信電話に大きく依存します。関係する言語の受け入れられた音訳に行くのが最善です: キリル文字からラテン語など.

于 2013-03-13T19:56:59.063 に答える