कुछ compilers JavaDoc और स्रोत कोड टिप्पणी में गैर- ASCII वर्ण पर असफल रहा।
ऐसा इसलिए है क्योंकि संकलक मानता है कि इनपुट यूटीएफ -8 है, और स्रोत फ़ाइल में अमान्य यूटीएफ -8 अनुक्रम हैं। ये आपके स्रोत कोड संपादक में टिप्पणियों में दिखाई देते हैं, यह अप्रासंगिक है क्योंकि लेक्सर (जो अन्य टोकन से टिप्पणियों को अलग करता है) कभी नहीं चलता है। विफलता तब होती है जब उपकरण लेक्सर रन से पहले बार्स को वर्णों में परिवर्तित करने का प्रयास कर रहा है।
javac
के लिए man
पेज और javadoc
कहना
-encoding name
Specifies the source file encoding name, such as
EUCJIS/SJIS. If this option is not specified, the plat-
form default converter is used.
तो एन्कोडिंग आप अपने स्रोत फ़ाइलों के लिए उपयोग किया है के साथ <encoding-name>
बदलने के बाद एन्कोडिंग झंडा
javadoc -encoding <encoding-name> ...
साथ javadoc
चल इसे सही एन्कोडिंग का उपयोग करना चाहिए।
यदि आपके पास स्रोत फ़ाइलों के समूह के भीतर उपयोग किए जाने वाले एक से अधिक एन्कोडिंग हैं जिन्हें आपको एक साथ संकलित करने की आवश्यकता है, तो आपको पहले इसे ठीक करने और सभी स्रोत फ़ाइलों के लिए एक वर्दी एन्कोडिंग पर व्यवस्थित करने की आवश्यकता है। आपको वास्तव में केवल यूटीएफ -8 का उपयोग करना चाहिए या ASCII से चिपकना चाहिए।
वर्तमान (जावा 7) और भविष्य (जावा 8 और आगे) प्रथाओं जावा स्रोत फ़ाइलों में यूनिकोड के संबंध में क्या है?
जावा में एक स्रोत फ़ाइल से निपटने के लिए एल्गोरिथ्म
- कलेक्ट बाइट्स
- वर्ण (UTF-16 कोड इकाइयों) कुछ एन्कोडिंग का उपयोग करने के लिए बाइट्स कन्वर्ट है।
'\\'
'u'
के सभी अनुक्रमों को बदलें, उसके बाद हेक्स-अंकों के अनुरूप कोड-इकाई के साथ चार हेक्स अंकों के साथ। अगर "\u"
है तो चार हेक्स अंकों के बाद त्रुटि हो गई है।
- अक्षर को टोकन में लेक्स करें।
- कक्षाओं में टोकन पार्स करें।
वर्तमान और पूर्व अभ्यास कि चरण 2, UTF-16 कोड इकाइयों को बाइट्स परिवर्तित है, उपकरण है जो संकलन इकाई (स्रोत फ़ाइल), लेकिन कमांड लाइन इंटरफेस के लिए वास्तविक मानक लोड कर रहा है पर निर्भर है है -encoding
ध्वज का उपयोग करने के लिए।
उस रूपांतरण के बाद, भाषा अनिवार्य है कि \uABCD
शैली अनुक्रमों को लेक्सिंग और पार्सिंग से पहले यूटीएफ -16 कोड इकाइयों (चरण 3) में परिवर्तित कर दिया गया है।
उदाहरण के लिए:
int a;
\u0061 = 42;
जावा बयान के एक वैध जोड़ी है। किसी भी जावा स्रोत कोड उपकरण चाहिए, वर्ण, लेकिन पार्स करने से पहले बाइट्स परिवर्तित करने के बाद, \ uABCD दृश्यों के लिए लग रही है और उन्हें बदलने तो यह कोड को पार्स से पहले
int a;
a = 42;
में बदल जाती है। यह तब भी होता है जब \ uABCD अनुक्रम होता है। [105, 110, 116, 32, 97, 59, 10, 92, 117, 48, 48, 54, 49, 32, 61, 32, 52, 50, 59]
वर्ण में कनवर्ट बाइट्स: ['i', 'n', 't', ' ', 'a', ';', '\n', '\\', 'u', '0', '0', '6', '1', ' ', '=', ' ', '4', '2', ';']
यूनिकोड निकल जाता बदलें: ['i', 'n', 't', ' ', 'a', ';', '\n', a, ' ', '=', ' ', '4', '2', ';']
लेक्स: इस प्रक्रिया की तरह
- बाइट्स जाओ दिखता
["int", "a", ";", "a", "=", "42", ";"]
- पार्स:
(Block (Variable (Type int) (Identifier "a")) (Assign (Reference "a") (Int 42)))
सभी गैर- ASCII वर्ण HTML और भागने के साथ JavaDoc में भाग निकले किया जाना चाहिए, की तरह कोड?
'<'
जैसे HTML विशेष वर्णों को छोड़कर कोई आवश्यकता नहीं है जिसे आप दस्तावेज़ीकरण में सचमुच दिखाना चाहते हैं। आप javadoc टिप्पणियों के अंदर \uABCD
अनुक्रमों का उपयोग कर सकते हैं। स्रोत फ़ाइल को पार्स करने से पहले जावा प्रक्रिया \u....
ताकि वे स्ट्रिंग्स, टिप्पणियों, कहीं भी वास्तव में दिखाई दे सकें।यही कारण है कि
System.out.println("Hello, world!\u0022);
मान्य जावा कथन है।
/** @return \u03b8 in radians */
जहाँ तक जावाडोक संबंध है
/** @return θ in radians */
के बराबर है।
लेकिन क्या जावा //
टिप्पणी बराबर होगा?
आप जावा में //
टिप्पणियों का उपयोग कर सकते हैं लेकिन जावाडॉक केवल /**...*/
टिप्पणियों के लिए टिप्पणियों के अंदर दिखता है। //
टिप्पणियां मेटाडेटा नहीं ले जा रही हैं। \uABCD
दृश्यों के जावा से निपटने का
एक उपशाखा है कि हालांकि
// Comment text.\u000A System.out.println("Not really comment text");
एकरेखीय टिपण्णी की तरह लग रहा है, और कई IDEs इस तरह के रूप में यह उजागर करेगा, यह नहीं है।
[इस] (http://en.wikibooks.org/wiki/Java_Programming/Syntax/Unicode_Source) पर एक नज़र डालें (मुझे यकीन है कि यह जेएलएस द्वारा निर्दिष्ट है)। –
दरअसल, आप अपनी स्रोत फ़ाइलों में इच्छित किसी भी एन्कोडिंग का उपयोग कर सकते हैं, आपको बस यह इंगित करने की आवश्यकता है कि आपने जावा कंपाइलर और javadoc कमांड लाइन में कौन सा चुना है। –
ठीक है, यह वह जानकारी है जिसे मैं ढूंढ रहा हूं! सबसे पहले, यह बहुत अच्छा है, और इस बारे में पता नहीं था। तो, अब मुझे यह समझने की जरूरत है कि कंपाइलर को यह जानने के लिए कि चार सेट का उपयोग कैसे किया जाए ... उदाहरण के लिए, सीडीके को एंटी, मेवेन और एक्लिप्स का उपयोग करके संकलित किया गया है ... –