Zauważyłem ten problem od lat, nie wiedząc, skąd pochodzi. Obawiam się, że ten błąd jest wciąż zauważalny w nowych wersjach Androida w 2011 roku i mam nadzieję, że w końcu pomożecie mi go w pełni zrozumieć, jeśli nie rozwiążecie go.Znaki specjalne w Androidzie sms
Rozważmy podaną (rzeczywistą) sytuację. Mister "A" używa niestandardowej aplikacji SMS/MMS od Sony na swoim Xperia Arc (oficjalny 2.3.3). Pan B używa aplikacji na stosy SMS/MMS na Androida w swoim Milestone (Cyanogen 6.12, nieoficjalny 2.2). Obaj używają Androida w języku francuskim (jeśli to ma znaczenie).
Kiedy A wysyła sms do B zawierającego specjalne znaki, takie jak "ç", "ê", B otrzymuje wiadomość z tymi znakami zastąpionymi przez spację. Znaki takie jak "é" działają jednak dobrze. Gdy B wysyła sms do A, wszystko działa poprawnie. Kiedy A wysyła ten SMS do siebie, wszystko działa poprawnie.
Wniosek: nie jest to wina operatora telefonii komórkowej, ponieważ działa ona w jeden sposób, a nie w drugą.
Tak, domyślam się, że coś było nie tak z niestandardową aplikacją A. Zastąpiono go apkiem z telefonu B. Wszystko pozostało takie samo. Odkompilowałem aplikację i nie znalazłem miejsca, w którym zostało wykonane kodowanie ciągu sms. Doszedłem do wniosku, że błąd nie pochodzi z aplikacji, ale ze sposobu, w jaki Android koduje ciągi ...
Przeprowadziłem kolejny test: Napisałem sms z tylko standardowymi znakami, coś jak 250 znaków w 1,5 sms. Następnie dodaję "ç" do sms. Na telefonie A: licznik mówi, że zużył 10 znaków. Na telefonie B: licznik mówi, że sms ma teraz 3 sms: rozmiar sznurka podwojony!
Wniosek: W telefonie A zestaw domyślny zawiera "ç". Na telefonie B, gdy pojawi się "ç", zestaw znaków zmienia się, a każdy znak potrzebuje dwa razy więcej miejsca niż oryginał. (Czy coś mi brakuje?)
Pytania: Dlaczego inna wersja Androida nie korzysta z tego samego domyślnego zestawu znaków? Na Androidzie, czy są to domyślne zestawy znaków, w zależności od typu rom? Czy możemy skonfigurować/zmienić te zestawy znaków gdzieś (w menu lub bezpośrednio na telefonie zrootowanym)? Czy istnieje inny prosty sposób na rozwiązanie tego problemu?
Każda pomoc, wyjaśnienie lub doświadczenie jest mile widziany :)
Dziękuję za odpowiedź. Przeprowadziliśmy test z innymi telefonami, taki sam wynik, gdy A wysyła wiadomość ze znakami specjalnymi. Sądzę więc, że jest problem, gdy A koduje sms. Czy na pewno robisz to w aplikacji SMS/MMS, a nie wewnętrznie w środowisku Android? Jak więc możemy wyjaśnić fakt, że zmiana aplikacji na telefonie A dla aplikacji pochodzącej z telefonu B nie rozwiązała problemu? – Romain360
Ponieważ są to oba urządzenia z Androidem, możesz sprawdzić wiadomość SMS, gdy przechodzi przez warstwę radiową, która jest po jej zakodowaniu. Jeśli używasz "adb logcat -b radio | tee radio.log ", a następnie wyślij wiadomość testową, powinieneś zobaczyć coś takiego: – patthoyts
E/RIL (133): smsc: E/RIL (133): strlen (pdu) = 114 (0x39), pdu: 01000c91449732832356000b2c005400650073007400 200065006e0063006f00640069006e0067002000e700200061006e006400200069002e To jest zakodowana w utf-16 wersja "Kodowanie testu ç i é". z niektórymi bajtami nagłówkowymi z przodu. Możemy to sprawdzić za pomocą pythona >>> x [26:] .decode ('hex') .dodode ('utf-16be') kodowanie 't' \ xe7 i \ xe9. ' Dzięki temu możesz sprawdzić wyjście do warstwy radiowej, które powinno pokazać, że zostało błędnie zakodowane przed odejściem od telefonu. – patthoyts