0

我有一个 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 变量包含来自不同语言的短信。我如何支持它?另外,我需要将它发送到我的服务器(python),如何翻译服务器上的 unicode?

4

1 回答 1

1

在 Python 2.7 中有两类字符串,str(标准字符串,由字节组成)和unicode(由 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

转换通常是隐式发生的,例如,如果您将 a 添加str到 a unicode,则在连接之前将其str提升为 a unicode(默认使用 encoding ascii)。

另一方面,unicode获得 ed 的实例print将被转换为str第一个,使用取决于它打印的流的编码(通常ascii也是如此)。

这些自动转换的场合往往是异常的来源(即如果转换失败)。如果你捕捉到太多异常,这些可能会被忽视,然后只是一些工具不起作用。

于 2013-03-09T00:57:35.283 回答