japanese email subject encoding

后端 未结 9 1502
天命终不由人
天命终不由人 2020-12-15 08:02

Aparently, encoding japanese emails is somewhat challenging, which I am slowly discovering myself. In case there are any experts (even those with limited experience will do)

相关标签:
9条回答
  • 2020-12-15 08:59

    =?ISO-2022-JP?B?TEXTTEXT...

    ISO_2022-JP means that string is encoded in ISO-2022-JP codepage (eg. not Unicode) B means that string is bese64 encoded

    In your example, you should just supply your string in ISO-2022-JP instead of Unicode.

    0 讨论(0)
  • 2020-12-15 09:01

    Check http://en.wikipedia.org/wiki/MIME#Encoded-Word for a description on how to encode header fields in MIME-compliant messages. You seem to be missing a “?=” at the end of your subject.

    0 讨论(0)
  • 2020-12-15 09:02

    I've been dealing with Japanese encodings for almost 20 years and so I can sympathize with your difficulties. Websites that I've worked on send hundreds of emails daily to Japanese customers so I can share with you what's worked for us.

    • First of all, do not use Shift-JIS. I personally receive tons of Japanese emails and almost never are they encoded using Shift-JIS. I think an old (circa Win 98?) version of Outlook Express encoded outgoing mail using Shift-JIS, but nowadays you just don't see it.

    • As you've figured out, you need to use ISO-2022-JP as your encoding for at least anything that goes in the mail header. This includes the Subject, To line, and CC line. UTF-8 will also work in most cases, but it will not work on Yahoo Japan mail, and as you can imagine, many Japanese users use Yahoo Japan mail.

    • You can use UTF-8 in the body of the email, but it is recommended that you base64 encode the UTF-8 encoded Japanese text and put that in the body instead of raw UTF-8 text. However, in practice, I believe that raw UTF-8 text will work fine these days, for the body of the email.

    • As I alluded to above, you need to at least test on Outlook (Exchange), Outlook Express (IMAP/POP3), and Yahoo Japan web mail. Yahoo Japan is the trickiest because I believe they use EUC for the encoding of their web pages, and so you need to follow the correct standards for your emails or they won't work (ISO-2022-JP is the standard for sending Japanese emails).

    • Also, your subject line should not exceed 75 characters per line. That is, 75 characters after you've encoded in ISO-2022-JP and base64, not 75 characters before conversion. If you exceed 75 characters, you need to break your encoded subject into multiple lines, starting with "=?iso-2022-jp?B?" and ending with "?=" on each line. If you don't do this, your subject might get truncated (depending on the email reader, and also the content of your subject text). According to RFC 2047:

    "An 'encoded-word' may not be more than 75 characters long, including 'charset', 'encoding', 'encoded-text', and delimiters. If it is desirable to encode more text than will fit in an 'encoded-word' of 75 characters, multiple 'encoded-word's (separated by CRLF SPACE) may be used."

    • Here's some sample PHP code to encode the subject:
    
     // Convert Japanese subject to ISO-2022-JP (JIS is essentially ISO-2022-JP)
    
     $subject = mb_convert_encoding ($subject, "JIS", "SJIS");
    
     // Now, base64 encode the subject
    
     $subject = base64_encode ($subject);
    
     // Add the encoding markers to the subject
    
     $subject = "=?iso-2022-jp?B?" . $subject . "?=";
    
     // Now, $subject can be placed as-is into the raw mail header.
    
    • See RFC 2047 for a complete description of how to encode your email header.
    0 讨论(0)
提交回复
热议问题