aspas inteligentes em um MimeMessage não aparecendo corretamente no Outlook

votos
1

Nosso aplicativo leva o texto de um formulário web e envia-lo via e-mail para um usuário apropriado. No entanto, quando alguém copiar / pastas nas infames aspas inteligentes ou outros caracteres especiais de Word, as coisas cabeludas.

O usuário digita

ele disse “Olá” para mim-não que bom?

Mas quando a mensagem aparece no Outlook 2003, ele sai como este:

ele disse Olá para meisnt legal?

O código para isso foi:

Session session = Session.getInstance(props, new MailAuthenticator());
Message msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setSubject(subject);
msg.setText(text);
msg.setHeader(X-Mailer, MailSender.class.getName());
msg.setSentDate(new Date());
Transport.send(msg);

Depois de um pouco de pesquisa, eu percebi que esta foi provavelmente uma questão de codificação de caracteres e tentou mudar as coisas para UTF-8. Então, eu atualizei o código assim:

Session session = Session.getInstance(props, new MailAuthenticator());
MimeMessage msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setHeader(X-Mailer, MailSender.class.getName());
msg.addHeader(Content-Type, text/plain);
msg.addHeader(charset, UTF-8);
msg.setSentDate(new Date());
Transport.send(msg);

Isso me chegou mais perto, mas nenhum charuto:

Ele disse que um “hello” para MEA-isnÂ't legal?

Eu não posso imaginar que este é um problema incomum - o que eu perdi?

Publicado 19/05/2009 em 16:41
fonte usuário
Em outras línguas...                            


4 respostas

votos
0

Por que você não substituir os agradáveis ​​citações com citações principais regulares?

Respondeu 19/05/2009 em 16:49
fonte usuário

votos
1

É a página com o formulário também usando UTF-8, ou um conjunto de caracteres diferente? Se você não especificar o charset página, o formato dos dados que chegam ao seu roteiro é uma incógnita.


Edit: o conjunto de caracteres na mensagem deve ser definido assim:

msg.addHeader("Content-Type", "text/plain; charset=UTF-8");

desde charset não é um cabeçalho separado, mas uma opção para Content-type

Respondeu 19/05/2009 em 17:01
fonte usuário

votos
0

Gostaria de verificar que os dados recebidos do navegador está correta - despejar os pontos de código Unicode e verificá-los contra os gráficos :

  public static void printCodepoints(char[] s) {
    for (int i = 0; i < s.length; i++) {
      int codePoint = Character.isHighSurrogate(s[i]) ? Character
          .toCodePoint(s[i], s[++i])
          : s[i];
      System.out.println(Integer.toHexString(codePoint));
    }
  }

Por exemplo, o símbolo de duplo ESQUERDA aspas ( ) é o caráter U + 201C.

Tem sido um longo tempo desde que eu usei a API mail, mas o MimeMessage.html.setText (texto, charset) método pode valer a pena um olhar. A documentação sobre setText (String) diz que usa o conjunto de caracteres padrão (provavelmente windows-1252 se você estiver usando Inglês / Latin-1 Windows).

Respondeu 19/05/2009 em 17:41
fonte usuário

votos
0

IIRC, citações do MS Office são encontrados characterset "iso-8859-1".

Respondeu 24/05/2009 em 16:25
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more