나는이 문제가 몇 년 전부터 어디서 왔는지 알지 못했다. 2011 년에이 새로운 버그가 Android의 새로운 버전에서 계속 볼 수 있다는 것에 우려합니다. 해결하지 못하면 완전히 이해할 수 있기를 바랍니다.안드로이드 문자의 특수 문자
주어진 (실제) 상황을 생각해 봅시다. 미스터 "A"는 Sony의 Xperia Arc (공식 2.3.3)에서 맞춤 SMS/MMS 앱을 사용하고 있습니다. Mister B는 Milestone (Cyanogen 6.12, 비공식 2.2)에서 Android SMS/MMS 스택 앱을 사용하고 있습니다. 둘 다 프랑스에서 Android를 사용합니다 (문제가있는 경우).
A가 "ç", "ê"와 같은 특수 문자가 포함 된 B로 SMS를 보내면 B는 이러한 문자를 공백으로 대체 한 메시지를 수신합니다. "é"와 같은 문자는 잘 작동합니다. B가 A에게 SMS를 보내면 모든 것이 잘됩니다. A가이 SMS를 자신에게 보냈을 때 모든 것이 잘 작동합니다.
결론 : 모바일 서비스 제공 업체의 잘못은 아니며 다른 방식으로는 작동하지 않기 때문입니다.
그래서 처음에는 A의 맞춤 앱에 문제가 있다는 것을 알았습니다. 그것을 B 전화의 APK로 바꿨습니다. 모든 것이 그대로였습니다. 나는 앱을 디 컴파일했고, SMS 문자열의 인코딩이 어디에서 이루어 졌는지 찾지 못했다. 나는 그 앱에서 버그가 오지 않는다고 결론을 내렸지 만, 안드로이드가 문자열을 인코딩하는 방식에서 ...
나는 다른 테스트를 실행했다 : 나는 1.5 문자의 250 문자와 같은 표준 문자 만 가진 SMS를 작성했다. 그런 다음 SMS에 "ç"을 추가합니다. A의 전화에서 : 카운터는 10자를 소비했다고 말합니다. B의 전화에서 : 카운터는 SMS가 이제 3 개의 SMS를 사용한다고 말합니다. 문자열 크기가 두 배로 증가했습니다.
결론 : A의 전화기에서 기본 문자 집합에는 "ç"이 포함됩니다. B의 전화기에서 "ç"가 나타나면 문자 세트가 변경되고 각 문자는 원래 공간의 두 배가 필요합니다. (또는 뭔가 빠졌습니까?)
질문 : 다른 Android 버전이 동일한 기본 문자 집합을 사용하지 않는 이유는 무엇입니까? Android에서 이러한 기본 문자 집합은 rom에 따라 다릅니다 (예 :?)? 메뉴에서 또는 루트 폰에서 직접 이러한 문자 세트를 구성/변경할 수 있습니까? 다른 문제를 쉽게 해결할 수 있습니까?
도움, 설명 또는 경험을 환영합니다 :)
답장을 보내 주셔서 감사합니다. A가 특수 문자가있는 메시지를 보낼 때와 동일한 결과를 다른 전화와 함께 실행했습니다. 그래서 A가 SMS를 인코딩 할 때 문제가 있다고 생각합니다. SMS/MMS 앱에서이 작업이 완료되었으며 Android 프레임 워크에서 내부적으로 수행되지 않았습니까? 어떻게 우리는 B의 전화에서 오는 응용 프로그램에 대한 A의 전화에서 응용 프로그램을 변경해도 문제가 해결되지 않았다는 사실을 설명 할 수 있습니까? – Romain360
이들은 두 가지 안드로이드 장치이므로 SMS 메시지가 인코딩 된 후에 무선 레이어를 통과 할 때 실제로 SMS 메시지를 검사 할 수 있습니다. 'adb logcat -b radio | tee radio.log '를 입력하고 테스트 메시지를 보내면 – patthoyts
E/RIL (133) : smsc : E/RIL (133) : strlen (pdu) = 114 (0x39), pdu : 01000c91449732832356000b2c005400650073007400 200065006e0063006f00640069006e0067002000e700200061006e0064002000e9002e 이것은 '테스트 인코딩 ç 및 é'의 utf-16 인코딩 버전입니다. 정면에 약간의 헤더 바이트가 있습니다. 우리는 이것을 파이썬 >>> x [26 :]. decode ('hex') 디코드 ('utf-16be') u'Test 인코딩 \ xe7 및 \ xe9를 사용하여 확인할 수 있습니다. 이렇게하면 라디오 레이어의 출력을 검사 할 수 있습니다. 라디오 레이어는 휴대폰에서 나가기 전에 잘못 인코딩 된 것으로 표시되어야합니다. – patthoyts