0

SMS メッセージを読んで Google アプリ エンジン サーバーに送信する Android アプリケーションがあります。一部のユーザーは、特定の言語が正しく表示されないと不満を漏らしています。

        // Execute query
        cursor = context.getContentResolver().query(
                SMS_PROVIDER_URI,
                SMS_QUERY_FIELDS,
                "date >= " + startDate.getTime(),  // selection - get messages > startDate
                null,                              // selectionArgs
                "date ASC");                       // order - get oldest messages first

        // Iterate results
        if (cursor != null && cursor.moveToFirst()) {

            // read through all the sms and create a list
            do {
                String sender              = cursor.getString(0);
                String message             = cursor.getString(2);
                boolean isIncomingMessage  = cursor.getString(3).contains("1");
                Date date                  = new Date(cursor.getLong(1));

                String contactName = ContactLookup.lookup(context, sender);

                smsList.add(new SMSMessageInfo(sender, contactName,
                        message, isIncomingMessage, date));

            } while (cursor.moveToNext());
        }

message 変数には、さまざまな言語の SMS メッセージが含まれています。どうすればサポートできますか? また、それをサーバー (python) に送信する必要があります。サーバーでユニコードを変換するにはどうすればよいですか?

4

1 に答える 1

1

Python 2.7には、文字列の2つのクラスstr(バイトで構成される標準文字列)とunicode(ユニコード文字で構成され、uプレフィックスを使用してリテラルとして示される:u "foo")があります。変換は、インスタンスのメソッドを使用して行われます。

u"blä".encode('utf8') → "bl\xc3\xa4"  # from unicode to str
"bl\xc3\xa4".decode('utf8') → u"blä"  # from str to unicode

多くの場合、変換は暗黙的に行われます。たとえば、をに追加するstrと、unicode連結の前に(デフォルトではencodingを使用して)strにプロモートされます。unicodeascii

一方、edされるunicodeインスタンスは、(通常は同様に)印刷されるストリームに依存するエンコーディングを使用して、最初のインスタンスに変換されます。printstrascii

これらの自動変換の機会は、多くの場合、例外の原因になります(つまり、変換が失敗した場合)。例外が多すぎると、見過ごされてしまい、一部の機能が機能しなくなる可能性があります。

于 2013-03-09T00:57:35.283 に答える