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 编码(ASCII 仍然存在)。

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

将 java 反向编码为 UTF-8:

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

添加问题后,我认为特殊字符的问题在于短信部分。成功很大程度上取决于提供商和接收电话。最好是为相关语言选择一个公认的音译:西里尔语到拉丁语左右。

于 2013-03-13T19:56:59.063 回答