2012-03-21 11 views
14

हैलो और मेरी पोस्ट पढ़ने के लिए धन्यवाद।संकलन (javac) एक यूटीएफ 8 एन्कोडेड जावा स्रोत कोड बीओएम

मेरी समस्या निम्न है: मैं एक जावा स्रोत फ़ाइल को "javac" के साथ संकलित करना चाहता हूं, इस फ़ाइल के साथ एक बीओएम (ओएस WinXP) के साथ एन्कोडेड यूटीएफ -8 है।

1) "नोटपैड" के साथ एक फ़ाइल बनाएँ और UTF-8 एन्कोडिंग

dos> notepad Test.java 
"File -> Save as..." 
File name : Test.java 
Save as type: All Files 
Encoding : UTF-8 
Save 

2) उस फ़ाइल में एक जावा वर्ग बनाएं चुनें और फाइल सेव:

नीचे मैं क्या कर रहा है 1 में की तरह)

public class Test 
{ 
    public static void main(String [] args) 
    { 
     System.out.println("This is a test."); 
    } 
} 

3) कल्पना फ़ाइल का हेक्साडेसिमल संस्करण (पहली पंक्ति)

dos> xxd Test.java | head -1 
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class 

नोट: एफई bb BF के UTF-8 एन्कोडेड बीओएम (UTF-16 एन्कोडेड बीओएम जा रहा है एफई एफएफ) है।

4) "javac"

dos> javac -encoding utf8 Test.java 
Test.java:1: illegal character: \65279 
?public class Test 
^ 
1 error 

नोट के साथ इस कोड को संकलित करने का प्रयास करें: 65,279 बीओएम की दशमलव संस्करण है।

मेरा प्रश्न है निम्नलिखित: यह UTF-8 एन्कोडेड

  • और बीओएम रखने रखने

    • : कैसे मैं के साथ इस संकलन का काम कर सकते हैं?

    मदद और सर्वोत्तम संबंधों के लिए धन्यवाद।

    लेय

  • +4

    यह सही है: आपको बीओएम को हटाना होगा। इसका यूटीएफ -8 में कोई व्यवसाय नहीं है, इसलिए निश्चित रूप से यह एक त्रुटि है। यह एक लंबे समय से चलने वाला माइक्रोसॉफ्ट बग है। यूटीएफ -8 में कभी भी बीओएम न रखें !!!!! – tchrist

    +0

    हैलो। आपके उत्तर के लिए धन्यवाद। मैंने फ़ाइल को "बीओएम के बिना यूटीएफ 8" के रूप में एन्कोड करने के लिए "नोटपैड ++" का उपयोग किया था। "javac" के साथ कोड संकलित अब काम करता है। –

    +3

    @ क्रिसमस [यूनिकोड मानक (पृष्ठ 30)] (http://www.unicode.org/versions/Unicode6.0.0/ch02.pdf) यूटीएफ -8 में बीओएम की अनुमति देता है ताकि आपको वहां रखने का हर अधिकार हो अगर आप चाहें तो। आप एक और कहानी क्यों चाहते हैं, लेकिन 'जावैक' को इसे संभालना चाहिए। – ArtB

    उत्तर

    20

    बीओएम ट्रिम और उसके बाद का उपयोग javac साथ javac -encoding utf8 x.java

    14

    यह नहीं है अपने पाठ संपादक के साथ एक समस्या है, यह एक समस्या है! यूनिकोड स्पेक का कहना है कि बीओएम यूटीएफ -8 में वैकल्पिक है, यह नहीं कहता कि यह वर्जित है! यदि कोई बीओएम हो सकता है, तो जावैक इसे संभालने के लिए है, लेकिन ऐसा नहीं है। असल में, यूटीएफ -8 फाइलों में बीओएम का उपयोग करना एक यूनिकोड-कोडित फ़ाइल से एक एएनएसआई-कोडित फ़ाइल को अलग करने के लिए उपयोगी है।

    बीओएम को हटाने का प्रस्तावित समाधान केवल एक समाधान है और उचित समाधान नहीं है।

    इस बग रिपोर्ट दर्शाती है कि इस "समस्या" होगा कभी नहीं जा तय: http://bugs.java.com/view_bug.do?bug_id=4508058

    के बाद से इस सूत्र "javac बीओएम" खोज के लिए शीर्ष 2 गूगल परिणामों में है, मैं इस यहाँ भविष्य पाठकों के लिए जा रहा हूँ ।