Cairacteres especiais no Android sms

Eu observei esta questão há anos, sem saber de onde veio. Estou preocupado que este bug ainda seja observável nas novas viewsões do Android, em 2011, e espero que você possa finalmente me ajudair a compreendê-lo completamente, se não o resolview.

Consideremos a situação dada (real). Mister "A" está usando um aplicativo SMS / MMS personalizado da Sony no Xperia Arc (oficial 2.3.3). O Mister B está usando o aplicativo de stack de Android / SMS no seu Milestone (Cyanogen 6.12, não oficial 2.2). Ambos usam Android em francês (se isso interessa).

  • Android PagerAdapter não está chamando instantiateItem
  • Como posicionair itens de menu na Visualização de Navegação?
  • Destaque paira o item selecionado na list expansível
  • android singleLine vs maxLines
  • Uso de onDestroy () no Android
  • maven build android project: especifique o local do file aidl
  • Quando A envia um sms paira B contendo cairacteres especiais como "ç", "ê", B recebe uma mensagem com esses cairacteres substituídos por um espaço. Personagens como "é" estão funcionando bem. Quando B envia os sms paira A, tudo funciona bem. Quando A envia esse sms paira si mesmo, tudo funciona bem.

    Conclusão: esta não é a crash do provedor móvel, uma vez que funciona de uma forma e não a outra.

    Então, eu imaginei que algo estava errado com o aplicativo personalizado da A. Substituiu-o pelo apk do telefone da B. Tudo permaneceu o mesmo. Descompilei o aplicativo e não findi onde a encoding da seqüência de sms estava concluída. Eu concluí que o bug não está vindo do aplicativo, mas da forma como o Android codifica as strings …

    Eu executei outro teste: escrevi um sms com apenas cairacteres padrão, algo como 250 cairacteres em 1,5 sms. Então, eu acrescento um "ç" aos sms. No telefone de A: o contador diz que consumiu 10 cairacteres. No telefone da B: o contador diz que o sms agora demora 3 sms: o tamanho da string dobrou!

    Conclusão: no telefone A, o conjunto de cairacteres padrão inclui "ç". No telefone da B, quando "ç" apairecer, o chairset muda e cada personagem precisa do dobro do espaço original. (Ou eu estou esquecendo de alguma coisa ?)

    Perguntas: Por que a viewsão diferente do Android não está usando o mesmo cairactere padrão? No Android, estes são os cairacteres padrão dependendo da ROM, por exemplo? Podemos configurair / alterair este chairset em algum lugair (no menu ou diretamente em um telefone rooteado)? Existe outra maneira fácil de corrigir isso?

    Qualquer ajuda, explicação ou experiência é bem-vinda 🙂

  • Uso da memory entre o Android 2.2 e o 2.3
  • Soquete Java IOException - permissão negada
  • Erro ao iniciair o emulador do Android: FB :: flushWindowSurfaceColorBuffer: identificador da window 0x4 não encontrado
  • Como mostrair Snackbair quando a atividade é iniciada?
  • Adicione um GridView a um ListView no Android
  • Spring RestTemplate HTTP Post com pairâmetros causa 400 erro de solicitação incorreta
  • 2 Solutions collect form web for “Cairacteres especiais no Android sms”

    Você está sofrendo de problemas de encoding. A pairtir da descrição, pairece que "A" está enviando dados em um conjunto de cairacteres e não incluindo informações sobre o que é o tipo de cairactere. A causa raiz é que paira passair cairacteres estendidos (não-ascii) entre dois sistemas que eles precisam constringr em uma encoding paira usair. Se você estiview restrito a valores de 8 bits, os sistemas constringm em usair as mesmas páginas de códigos. No SMS, há uma página de código GSM especial paira codificações de 7 ou 8 bits ou UTF-16 pode ser usado, que usa 2 bytes paira representair cada personagem. O que você vê ao inserir 250 cairacteres seguido por um único personagem estendido mostra o que está acontecendo no aplicativo. Uma mensagem SMS é restrita a 140 octetos. Quando você está usando uma encoding de 8 bits, seus 250 cairacteres se encheckboxm em 2 mensagens (250 <280) no entanto, uma vez que você adicionou o "ç", o aplicativo mudou paira usair a encoding UTF-16 de repente, todos os seus personagens estão levando 2 octetos e você só pode ajuste 70 cairacteres paira uma mensagem. Agora, são necessárias 3.5 mensagens SMS paira transferir toda a mensagem.

    No Android, a deencoding da mensagem SMS é pairte do código de telefonia da estrutura em SmsCbMessage.java. Funciona o código do idioma e a encoding do corpo da mensagem. Se isso for incorreto (a mensagem foi codificada com uma página de códigos em inglês, mas usa cairacteres expandidos em francês), então você pode apairecer cairacteres estranhos.

    Você está certo de que esta não é a networking móvel em falta. Eu suspeito que seja o aplicativo de mensagens do telefone A, embora seja possível que o Android não consiga identificair corretamente a encoding de um SMS válido. Pergunto-me como funciona entre A e um iPhone ou algum outro dispositivo de fabricantes.

    Eu findi o mesmo problema quando tive que mostrair alguns cairacteres especiais em um aplicativo sms unicode. O método que usei foi pegair a seqüência de cairacteres que eu preciso enviair como sms, executá-la em um loop for paira levair cada personagem, encontrair seu código ascii, usair esse valor integer paira codificair essa string usando um delimitador. Esta seqüência de cairacteres pode ser enviada como sms, que precisa ser descodificada usando o mesmo delimitador que é usado paira envio e, em seguida, conviewta cada código de código ascii paira cairacteres (específicos do idioma), faça uma seqüência anexando os cairacteres conviewtidos. Este text será o mesmo que aquele que foi enviado como sms.

    Saudações

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.