2009-01-07 20 views
13

जाहिर है, जापानी ईमेल एन्कोडिंग कुछ चुनौतीपूर्ण है, जिसे मैं धीरे-धीरे खुद को खोज रहा हूं। यदि कोई विशेषज्ञ हैं (यहां तक ​​कि सीमित अनुभव वाले लोग भी) करेंगे, तो क्या मुझे कुछ दिशानिर्देश हैं कि इसे कैसे करें, इसका परीक्षण कैसे करें और इसे कैसे सत्यापित करें?जापानी ईमेल विषय एन्कोडिंग

ध्यान रखें कि मैंने कभी जापान के पास कहीं भी पैर नहीं लगाया है, यह केवल इतना है कि मैं जो उत्पाद विकसित कर रहा हूं, वहां अन्य स्थानों के साथ उपयोग किया जाता है।

क्या (मुझे लगता है कि) मैं जानता हूँ कि अब तक पीछा कर रहा है:
- जापानी ईमेल आईएसओ-2022-जेपी में एन्कोड किया जाना चाहिए, जापानी JIS कोड पृष्ठ पर 50220 या संभवतः SHIFT_JIS कोड पृष्ठ पर 932
- ईमेल स्थानांतरण एन्कोडिंग सेट किया जाना चाहिए सादा पाठ के लिए बेस 64 और एचटीएमएल
के लिए 7 बिट - ईमेल विषय "=? आईएसओ -2022-जेपी? बी" से शुरू करने के लिए अलग से एन्कोड किया जाना चाहिए? (यह नहीं पता कि इसका क्या मतलब है)। मैं

"=?ISO-2022-JP?B?" + Convert.ToBase64String(Encoding.Unicode.GetBytes(subject)) 

जो मूल रूप से एन्कोडेड स्ट्रिंग देता है के साथ विषय एन्कोडिंग की कोशिश की है के रूप में उम्मीद है, लेकिन यह एक ईमेल प्रोग्राम में किसी भी जापानी पाठ के रूप में प्रस्तुत नहीं हो
- मैं Outlook 2003, Outlook में परीक्षण किया है एक्सप्रेस और जीमेल

किसी भी मदद की बहुत


ठीक है की सराहना की होगी, तो एक छोटे से अद्यतन पोस्ट करने के लिए, दो सहायक उत्तरों के लिए धन्यवाद, मैं सही प्रारूप और एन्कोडिंग पाने में कामयाब रहे है।
=?iso-2022-jp?B?6 Japanese test に各々の視点で語ってもらった。 6相当の防水?=

हालांकि, आउटलुक एक्सप्रेस में ठीक उसी ईमेल इस तरह विषय देता है:: अब, आउटलुक कुछ है कि सही विषय जैसा दिखता देता
=?iso-2022-jp?B?6 Japanese test 縺ォ蜷・・・隕也せ縺ァ隱槭▲縺ヲ繧ゅi縺」縺溘・ 6逶ク蠖薙・髦イ豌エ?=

इसके अलावा, जब आउटलुक एक्सप्रेस में इनबॉक्स दृश्य में देखी , ईमेल विषय और भी अजीब है, इस तरह:
=?iso-2022-jp?B?6 Japanese test ??????????????? 6???????=

जीमेल आउटलुक के समान फैशन में काम कर रहा है, जो सही दिखता है।

मैं बस इस के आसपास अपना सिर नहीं प्राप्त कर सकता।

+0

आपकी धारणाएं सही हैं, लेकिन मुझे वाक्यविन्यास के बारे में निश्चित नहीं है। –

+1

मैं बस सोच रहा हूं, आप यूटीएफ -8 का उपयोग क्यों नहीं कर सकते? –

+0

आप यूटीएफ -8 का उपयोग कर सकते हैं, लेकिन जापान में वास्तविकता यह है कि यूटीएफ -8 अभी तक एक द्वितीय श्रेणी का नागरिक है। जापान में सरकारी संबंधों, व्यवसायों और स्कूलों में मुझे मिली अधिकांश जापानी मशीनें और दस्तावेज अभी भी SHIFT_JIS हैं। –

उत्तर

22

मैं लगभग 20 साल के लिए जापानी एन्कोडिंग के साथ काम कर रहा है और इसलिए मैं आपकी कठिनाइयों से सहानुभूति व्यक्त कर सकता हूं। जिन वेबसाइटों पर मैंने काम किया है, वे रोज़ाना जापानी ग्राहकों को सैकड़ों ईमेल भेजते हैं ताकि मैं आपके साथ साझा कर सकूं जो हमारे लिए काम करता है।

  • सबसे पहले, शिफ्ट-जेआईएस का उपयोग न करें। मुझे व्यक्तिगत रूप से कई जापानी ईमेल प्राप्त होते हैं और लगभग शिफ्ट-जेआईएस का उपयोग करके उन्हें एन्कोड नहीं किया जाता है। मुझे लगता है कि आउटलुक एक्सप्रेस के पुराने (सर्क विन 98?) संस्करण ने शिफ्ट-जेआईएस का उपयोग करके आउटगोइंग मेल एन्कोड किया था, लेकिन आजकल आप इसे नहीं देखते हैं।

  • जैसा कि आपने पाया है, आपको मेल हेडर में कम से कम कुछ भी करने के लिए आईएसओ -2022-जेपी को अपने एन्कोडिंग के रूप में उपयोग करने की आवश्यकता है। इसमें विषय, रेखा, और सीसी रेखा शामिल है। यूटीएफ -8 ज्यादातर मामलों में भी काम करेगा, लेकिन यह याहू जापान मेल पर काम नहीं करेगा, और जैसा कि आप कल्पना कर सकते हैं, कई जापानी उपयोगकर्ता याहू जापान मेल का उपयोग करते हैं।

  • आप ईमेल के शरीर में यूटीएफ -8 का उपयोग कर सकते हैं, लेकिन यह अनुशंसा की जाती है कि आप बेस 64 यूटीएफ -8 एन्कोडेड जापानी टेक्स्ट को एन्कोड करें और कच्चे यूटीएफ -8 टेक्स्ट के बजाय शरीर में रखें। हालांकि, व्यावहारिक रूप से, मेरा मानना ​​है कि ईमेल के शरीर के लिए कच्चे यूटीएफ -8 पाठ इन दिनों ठीक काम करेंगे।

  • जैसा कि मैंने ऊपर बताया है, आपको कम से कम आउटलुक (एक्सचेंज), आउटलुक एक्सप्रेस (आईएमएपी/पीओपी 3), और याहू जापान वेब मेल पर परीक्षण करने की आवश्यकता है। याहू जापान सबसे कठिन है क्योंकि मेरा मानना ​​है कि वे अपने वेब पृष्ठों के एन्कोडिंग के लिए ईयूसी का उपयोग करते हैं, और इसलिए आपको अपने ईमेल के लिए सही मानकों का पालन करना होगा या वे काम नहीं करेंगे (आईएसओ -2022-जेपी जापानी ईमेल भेजने के लिए मानक है)।

  • इसके अलावा, आपकी विषय पंक्ति प्रति पंक्ति 75 वर्णों से अधिक नहीं होनी चाहिए। यही है, के बाद 75 वर्ण आपने आईएसओ -2022-जेपी और बेस 64 में एन्कोड किया है, रूपांतरण से पहले 75 वर्ण नहीं। यदि आप 75 वर्णों से अधिक हो जाते हैं, तो आपको अपने एन्कोडेड विषय को कई पंक्तियों में तोड़ने की ज़रूरत है, "=? Iso-2022-jp? बी?" से शुरू हो रहा है और प्रत्येक पंक्ति पर "? =" के साथ समाप्त होता है। यदि आप ऐसा नहीं करते हैं, तो आपका विषय छोटा हो सकता है (ईमेल रीडर के आधार पर, और आपके विषय टेक्स्ट की सामग्री भी)।RFC 2047 के अनुसार:।

"एक 'इनकोडिंग-शब्द', 75 से अधिक वर्ण लंबा नहीं हो सकता है 'शब्दसमुच्चय', 'एन्कोडिंग', 'इनकोडिंग-पाठ', और सीमांकक सहित यदि यह वांछनीय है 75 अक्षरों के 'एन्कोडेड-शब्द' में फ़िट होने से अधिक टेक्स्ट एन्कोड करने के लिए, एकाधिक 'एन्कोडेड-शब्द (सीआरएलएफ स्पेस द्वारा अलग) का उपयोग किया जा सकता है। " कैसे अपने ईमेल हेडर एन्कोड करने के लिए का पूरा विवरण के लिए


// 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. 
  • आरएफसी देखें 2047:

    • यहाँ विषय एन्कोड करने के लिए कुछ नमूना PHP कोड है।
+1

महान जवाब! याहू मेल को यूटीएफ -8 का समर्थन करने में परेशानी नहीं होती है, लेकिन अधिकांश जापानी सेल फोन अभी भी यूटीएफ -8 में ईमेल प्राप्त करने का समर्थन नहीं करते हैं, इसलिए आप आईएसओ -2022-जेपी – Elijah

+0

के साथ अटक गए हैं असल में मुझे वेबमेल सेवाएं और सेलफोन समर्थन मिला है शिफ्ट-जेआईएस ठीक है। यह उपलब्ध एन्कोडिंग का सबसे कॉम्पैक्ट है, इसलिए हम इसके लिए जाते हैं और अभी तक कोई समस्या नहीं है। – bobince

+0

कम से कम इस विषय के लिए आईएसओ -2022-जेपी के साथ चिपकने के लिए सबसे अच्छा है, क्योंकि यह अब तक का सबसे व्यापक रूप से समर्थित है। विशेष रूप से सेल फोन के मामले में। ज्यादातर मामलों में नए फोन (विशेष रूप से सॉफ्टबैंक) अब utf-08 का समर्थन करते हैं लेकिन एक वर्ष से अधिक पुराना कुछ भी निश्चित रूप से utf-8 का समर्थन नहीं करेगा। आईएसओ -2022-जेपी-एक्सटी से दूर रहने के लिए भी सावधान रहें।इसका * लगभग * आईएसओ -2022-जेपी जैसा ही है लेकिन मेरा अनुभव यह है कि विस्तारित वर्ण अक्सर कई सेल फोन द्वारा समर्थित नहीं होते हैं। – si28719e

6

MIME- अनुपालन संदेशों में हेडर फ़ील्ड को एन्कोड करने के तरीके के विवरण के लिए http://en.wikipedia.org/wiki/MIME#Encoded-Word देखें। ऐसा लगता है कि आप अपने विषय के अंत में "? =" गायब हैं।

2

=? आईएसओ-2022-जेपी? बी? TEXTTEXT ...

ISO_2022-जेपी मतलब यह है कि स्ट्रिंग आईएसओ-2022-जेपी कोडपेज में एन्कोड किया गया है (उदाहरण के लिए। नहीं यूनिकोड) बी कि स्ट्रिंग का मतलब bese64 एन्कोडेड

आपके उदाहरण में, आपको केवल यूनिकोड के बजाय आईएसओ -2022-जेपी में अपनी स्ट्रिंग की आपूर्ति करनी चाहिए।

+0

+1। धन्यवाद। – GuruM

0

सबसे पहले आप का उपयोग करना चाहिए:

Encoding.GetEncoding("ISO-2022-JP")

बाइट्स कि Convert.ToBase64String द्वारा कार्रवाई की जाएगी में अपने विषय पंक्ति कन्वर्ट करने के लिए()।

=? आईएसओ -2022-जेपी? बी? टेक्स्ट ... ... = प्राप्तकर्ता मेल क्लाइंट को बताता है कि प्रेषक के पक्ष में एन्कोडिंग का उपयोग जापानी "अक्षरों" को बाइट स्ट्रीम में बदलने के लिए किया जाता था।

वर्तमान में आप एन्कोड करने के लिए यूटीएफ -16 का उपयोग कर रहे हैं, लेकिन डीकोड करने के लिए आईएसओ -2022-जेपी निर्दिष्ट कर रहे हैं। ये स्पष्ट रूप से दो अलग-अलग एन्कोडिंग हैं, मुझे लगता है कि आईएसओ -885 9 -1 यूनिकोड से अलग है (अधिकांश विस्तारित पश्चिमी-यूरोप वर्णों को आईएसओ-XXX में एक बाइट द्वारा दर्शाया जाता है, लेकिन यूनिकोड में दो बाइट्स)।

मुझे यकीन नहीं है कि यूटीएफ -8 के बारे में आप क्या मतलब दूसरे श्रेणी के नागरिक हैं। जब तक प्राप्त मेल क्लाइंट यूटीएफ -8 को समझता है और इसे वर्तमान जापानी लोकेल में परिवर्तित करने में सक्षम होता है, तो सब कुछ ठीक है।

+2

यूटीएफ -8 निश्चित रूप से जापान में एक द्वितीय श्रेणी का नागरिक है - निराशाजनक रूप से, क्योंकि उनके अपने मानदंड खूनी भयानक हैं। सेल फोन वेब ब्राउज़र ने केवल इसे समर्थन देने के लिए पकड़ा है और अभी भी वेब मेल प्रदाता हैं जो आने वाले यूटीएफ -8 मेल को समझ नहीं सकते हैं। यह बिल्कुल दयनीय है। – bobince

1

मुझे जापानी में ईमेल लिखने और ईमेल भेजने का कुछ अनुभव है ... आम तौर पर आपको सावधान रहना होगा कि ऑपरेटिंग सिस्टम के लिए उपयोग किए जाने वाले एन्कोडिंग और आप अपने जापानी तारों को कैसे स्टोर करते हैं! मेरे मेल वस्तुओं सामान्य रूप से इस प्रकार इनकोड:

string s = "V‚µ‚¢ŠwK–@‚Ì‚²’ñˆÄ"; // Our japanese are shift-jis encoded, so it appears like garbled 
    MailMessage message = new MailMessage(); 
    message.BodyEncoding = Encoding.GetEncoding("iso-2022-jp"); 
    message.SubjectEncoding = Encoding.GetEncoding("iso-2022-jp"); 
    message.Subject = s.ToEncoding(Encoding.GetEncoding("Shift-Jis")); // Change the encoding to whatever your source is 
    message.Body = s.ToEncoding(Encoding.GetEncoding("Shift-Jis")); // Change the encoding to whatever your source is 

तो मैं एक विस्तार विधि के लिए करता है जो मेरे लिए रूपांतरण:

public static string ToEncoding(this string s, Encoding targetEncoding) 
     { 
      return s == null ? null : targetEncoding.GetString(Encoding.GetEncoding(1252).GetBytes(s)); //1252 is the windows OS codepage    
     } 
1

कुछ इस तरह काम अजगर में किया जाना चाहिए:


#!/usr/bin/python                            
# -*- mode: python; coding: utf-8 -*-                       
import smtplib 
from email.MIMEText import MIMEText 
from email.Header import Header 
from email.Utils import formatdate 

def send_from_gmail(from_addr, to_addr, subject, body, password, encoding="iso-2022-jp"): 

    msg = MIMEText(body.encode(encoding), 'plain', encoding) 
    msg['Subject'] = Header(subject.encode(encoding), encoding) 
    msg['From'] = from_addr 
    msg['To'] = to_addr 
    msg['Date'] = formatdate() 

    s = smtplib.SMTP('smtp.gmail.com', 587) 
    s.ehlo(); s.starttls(); s.ehlo() 

    s.login(from_addr, password) 
    s.sendmail(from_addr, to_addr, msg.as_string()) 
    s.close() 
    return "Sent mail to: %s" % to_addr 



if __name__ == "__main__": 
    import sys 
    for n,item in enumerate(sys.argv): 
     sys.argv[n] = sys.argv[n].decode("utf8") 

    if len(sys.argv)==6: 
     print send_from_gmail(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5]) 
    elif len(sys.argv)==7: 
     print send_from_gmail(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], encoding=sys.argv[6]) 
    else: 
     raise "SYNTAX: %s <from_addr> <to_addr> <subject> <body> <password> [encoding]" 

** तो एकदम चोरी/से अनुकूलित:

http://mtokyo.blog9.fc2.com/blog-entry-127.html

0
<?php 

function sendMail($to, $subject, $body, $from_email,$from_name) 
{ 
$headers = "MIME-Version: 1.0 \n" ; 
$headers .= "From: " . 
     "".mb_encode_mimeheader (mb_convert_encoding($from_name,"ISO-2022-JP","AUTO")) ."" . 
     "<".$from_email."> \n"; 
$headers .= "Reply-To: " . 
     "".mb_encode_mimeheader (mb_convert_encoding($from_name,"ISO-2022-JP","AUTO")) ."" . 
     "<".$from_email."> \n"; 


$headers .= "Content-Type: text/plain;charset=ISO-2022-JP \n"; 


/* Convert body to same encoding as stated 
in Content-Type header above */ 

$body = mb_convert_encoding($body, "ISO-2022-JP","AUTO"); 

/* Mail, optional parameters. */ 
$sendmail_params = "-f$from_email"; 

mb_language("ja"); 
$subject = mb_convert_encoding($subject, "ISO-2022-JP","AUTO"); 
$subject = mb_encode_mimeheader($subject); 

$result = mail($to, $subject, $body, $headers, $sendmail_params); 

return $result; 
} 
0

जापानी एन्कोडिंग का परिचय ई करने के लिए -मेल 90 के दशक में जुनेट (यूयूसीपी आधारित राष्ट्रव्यापी नेटवर्क) में हुआ था।

उस समय, आरएफसी 1468 परिभाषित किया गया था। यदि आप सादा पाठ मेल में RFC1468 का पालन करते हैं, तो कोई समस्या नहीं होगी।

यदि आप एचटीएमएल मेल को संभालना चाहते हैं, तो आरएफसी 1468 हेडर भागों को छोड़कर बेकार है।

0

यहां मैं जापानी ईमेल भेजने के लिए उपयोग करता हूं। आउटलुक 2010, जीमेल और आईफोन पर विषय पंक्ति ठीक दिखती है।

Encoding encoding = Encoding.GetEncoding("iso-2022-jp"); 
byte[] bytes = encoding.GetBytes(subject); 
string uuEncoded = Convert.ToBase64String(bytes); 
subject = "=?iso-2022-jp?B?" + uuEncoded + "?="; 

// not sure this is actually necessary... 
mailMessage.SubjectEncoding = Encoding.GetEncoding("iso-2022-jp"); 
संबंधित मुद्दे