2009-05-19 4 views
1

Google 애플리케이션은 웹 양식에서 텍스트를 가져 와서 이메일을 통해 적절한 사용자에게 보냅니다. 그러나 악명 높은 "똑똑한 따옴표"또는 Word의 다른 특수 문자를 누군가가 복사/붙여 넣으면 물건이 털이됩니다.Outlook에서 MimeMessage의 스마트 인용 부호가 올바르게 표시되지 않습니다.

에서

사용자 유형 그는 "안녕하세요"라고 좋은 저-밤은?

그러나 메시지가 Outlook 2003에서 나타날 때, 그것은 다음과 같이 나온다 :

그가 인사가 좋은를 meisnt라고? 이것에 대한

코드이었다

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); 

이 조금 연구 후에, 나는이 아마 문자 인코딩 문제라고 생각 했어요 및 UTF-8로 물건을 이동하려고했습니다. 좋은 것을 MEA-isnÂ't에

그는 "helloÂ"말했다 :

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); 

이 가까이 저를 가지고 있지만 시가 : 그래서, 내가 thusly 히 코드를 업데이트?

나는 이것이 드문 문제라고 상상할 수 없다. 무엇을 놓쳤는가?

+0

charset은 별도의 머리글이 아닌 Content-Type 옵션입니다. 그렇지 않으면 좋아 보인다. – Piskvor

답변

1

양식의 페이지도 UTF-8 또는 다른 문자 세트를 사용합니까? 웹 페이지 문자 세트를 지정하지 않으면 스크립트에 들어오는 데이터의 형식은 누구나 추측 할 수 있습니다.


편집 : 메시지의 캐릭터 세트는 다음과 같이 설정해야합니다

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

캐릭터 세트는 별도의 헤더가 아니라 콘텐츠 형식에 대한 옵션이

+0

페이지 문자 세트를 설정하십시오. (UTF-8로). 붙여 넣은 캐릭터를 변환하는 것은 탐색기에 달려 있다고 생각합니다. "test" – KarlP

0

멋진 따옴표를 일반 따옴표로 바꾸지 않는 이유는 무엇입니까?

+1

그건 분명히 선택 사항이지만, "을 "으로 대체하는지도를 작성하지 않아도되고 싶습니다. – abeger

0

내가 확인 것이기 때문에 브라우저에서받은 데이터가 정확합니다. 유니 코드 코드 포인트를 덤프하고 charts에 대해 확인하십시오.

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)); 
    } 
    } 

예를 들어, 기호 DOUBLE LEFT QUOTATION MARK (& # x201C;)는 U + 201C 문자입니다.

메일 API를 사용한 이후로 오랜 시간이 걸렸지 만 MimeMessage.html.setText(text, charset) 메서드를 살펴볼 가치가 있습니다. setText(String)에있는 문서는 기본 문자 세트 (영어/라틴어 -1 Windows를 사용하는 경우 아마도 windows-1252)를 사용한다고 말합니다.

0

IIRC, MS Office 견적은 "iso-8859-1"문자 세트로되어 있습니다.

+0

아니요, 그렇지 않습니다. 이들은 많은 MS Office 코드 페이지에 있으며, 일부는 해당 ISO 라틴어 문자 세트의 "포용 및 확장"버전과 상당히 유사합니다. – tripleee