Tôi đã quan sát vấn đề này trong nhiều năm nay, không biết nó đến từ đâu. Tôi lo ngại rằng lỗi này vẫn có thể quan sát được trong các phiên bản Android mới, vào năm 2011 và tôi hy vọng bạn cuối cùng có thể giúp tôi hiểu đầy đủ, nếu không giải quyết được.Ký tự đặc biệt trong Android sms
Hãy xem xét tình huống (thực) đã cho. Mister "A" đang sử dụng ứng dụng SMS/MMS tùy chỉnh từ Sony trên Xperia Arc (chính thức 2.3.3). Mister B đang sử dụng ứng dụng ngăn xếp SMS/MMS Android trên Milestone của anh ấy (Cyanogen 6.12, không chính thức 2.2). Cả hai đều sử dụng Android bằng tiếng Pháp (nếu có).
Khi A gửi một tin nhắn tới B chứa các ký tự đặc biệt như "ç", "ê", B sẽ nhận được một tin nhắn với các ký tự này được thay thế bằng dấu cách. Nhân vật như "é" đang làm việc tốt mặc dù. Khi B gửi sms đến A, mọi thứ hoạt động tốt. Khi A gửi sms này cho chính mình, mọi thứ hoạt động tốt.
Kết luận: đây không phải lỗi của nhà cung cấp dịch vụ di động vì nó hoạt động theo cách này chứ không phải cách khác.
Vì vậy, tôi đoán lúc đầu rằng có sự cố với ứng dụng tùy chỉnh của A. Thay thế nó bằng apk từ điện thoại của B. Mọi thứ vẫn như cũ. Tôi giải mã các ứng dụng và tôi đã không tìm thấy nơi mã hóa của chuỗi sms đã được thực hiện. Tôi đã kết luận lỗi này không xuất phát từ ứng dụng, nhưng từ cách Android mã hóa các chuỗi ...
Tôi đã chạy một thử nghiệm khác: Tôi đã viết một tin nhắn chỉ với các ký tự chuẩn, khoảng 250 ký tự trong 1,5 sms. Sau đó, tôi nối thêm "ç" vào sms. Trên điện thoại của A: bộ đếm cho biết nó tiêu thụ 10 ký tự. Trên điện thoại của B: bộ đếm cho biết tin nhắn hiện có 3 tin nhắn: kích thước chuỗi tăng gấp đôi!
Kết luận: Trên điện thoại của A, bộ ký tự mặc định bao gồm "ç". Trên điện thoại của B, khi "ç" xuất hiện, bộ ký tự thay đổi và mỗi ký tự cần gấp hai lần không gian ban đầu. (Hoặc tôi thiếu điều gì đó?)
Câu hỏi: Tại sao phiên bản Android khác không sử dụng cùng bộ ký tự mặc định? Trên Android, các bộ ký tự mặc định này có phụ thuộc vào rom không? Chúng tôi có thể định cấu hình/thay đổi các bộ ký tự này ở đâu đó (trong menu hoặc trực tiếp trên điện thoại bắt nguồn) không? Có cách nào khác dễ dàng để sửa lỗi này không?
Bất kỳ trợ giúp, giải thích hoặc trải nghiệm nào đều được chào đón :)
Cảm ơn câu trả lời của bạn. Chúng tôi đã chạy thử nghiệm với các điện thoại khác, cùng một kết quả khi A gửi một tin nhắn có các ký tự đặc biệt. Vì vậy, tôi đoán có một vấn đề khi A được mã hóa sms. Bạn có chắc điều này được thực hiện trong ứng dụng SMS/MMS chứ không phải trong nội bộ khung Android? Làm thế nào chúng ta có thể sau đó giải thích thực tế là việc thay đổi các ứng dụng trên điện thoại của A cho các ứng dụng đến từ điện thoại của B đã không cố định vấn đề? – Romain360
Vì đây là cả hai thiết bị Android, bạn thực sự có thể kiểm tra tin nhắn SMS khi nó đi qua lớp radio sau khi nó được mã hóa. Nếu bạn sử dụng 'adb logcat -b radio | tee radio.log 'và sau đó gửi tin nhắn thử nghiệm của bạn, bạn sẽ thấy một cái gì đó như sau: – patthoyts
E/RIL (133): smsc: E/RIL (133): strlen (pdu) = 114 (0x39), pdu: 01000c91449732832356000b2c005400650073007400 200065006e0063006f00640069006e0067002000e700200061006e0064002000e9002e Đây là phiên bản được mã hóa utf-16 của 'Mã hóa kiểm tra ç và é'. với một số byte tiêu đề ở phía trước. Chúng ta có thể kiểm tra điều này bằng cách sử dụng python >>> x [26:]. Giải mã ('hex') giải mã ('utf-16be') mã hóa u'Test \ xe7 và \ xe9. ' Vì vậy, với điều này bạn có thể kiểm tra đầu ra cho các lớp radio mà nên hiển thị nó đã được mã hóa sai trước khi nó rời khỏi điện thoại. – patthoyts