2011-02-14 19 views
57

मुझे निम्न विधि में संकलन त्रुटि मिल रही है।"यूटीएफ -8 एन्कोडिंग के लिए अपरिवर्तनीय वर्ण" त्रुटि

public static boolean isValidPasswd(String passwd) { 
    String reg = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$"; 
    return Pattern.matches(reg, passwd); 
} 
 
at Utility.java:[76,74] unmappable character for 
enoding UTF-8. 74th character is' " ' 

मैं इसे कैसे ठीक कर सकते हैं? धन्यवाद।

+0

मेरे ग्रहण के साथ बस ठीक है, लेकिन बीच में '¬' थोड़ा अजीब दिखता है, क्या आप सुनिश्चित हैं कि समस्या '' 'और' ¬ 'के साथ है? क्या आपने फ़ाइल को किसी अन्य संपादक के साथ सहेजने की कोशिश की है और यह सुनिश्चित करना कि एन्कोडिंग यूटीएफ -8 है? – esaj

+0

मैंने जो किया वह फ़ाइल को खोलने के लिए किया गया था (उम्मीद है कि आप किस फाइल को शिकायत कर रहे हैं उसे कम कर सकते हैं)। फिर मैंने फ़ाइल को फिर से सहेजा (परिवर्तन को पंजीकृत करने के लिए कुछ यादृच्छिक पात्रों को लिखने के बाद , फिर उन्हें मिटा दिया)। फिर फिर से सहेजने के बाद, मैं संकलित कर सकता था।मुझे लगता है कि पुन: सहेजने से फ़ाइल आपके ओएस के मूल तरीके से बचाती है। – user798719

उत्तर

1

मेरे लिए निम्नलिखित compiles:

class E{ 
    String s = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¼.,-])(?=[^\\s]+$).{8,24}$"; 
} 

देखें:

enter image description here

+1

आपने '¼' को' ¼' से बदल दिया है। –

+0

@ ल्यूक एमएच यह अजीब बात है, यही वह है जो कॉपी/पेस्ट मेरे लिए करता है .. मैंने अपनी जीवीआईएम विंडो का स्क्रीनशॉट जोड़ा है। वैसे भी, मैं वास्तव में सवाल का जवाब नहीं दे रहा हूं, इसलिए मैं यह सीडब्ल्यू बनाउंगा। – OscarRyz

6

जावा कम्पाइलर क्योंकि या तो आप इसे निर्दिष्ट होना करने के लिए या मानता है कि अपने इनपुट UTF-8 एन्कोडेड है, क्योंकि यह आपका मंच डिफ़ॉल्ट एन्कोडिंग है।

हालांकि, आपके .java फ़ाइलों में डेटा वास्तव में यूटीएफ -8 में एन्कोड नहीं किया गया है। समस्या शायद ¬ चरित्र है। सुनिश्चित करें कि आपका संपादक (या आईडीई) पसंद वास्तव में यूटीएफ -8 एन्कोडिंग में अपनी फ़ाइल को सुरक्षित करता है।

2

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

वैकल्पिक रूप से, आप चरित्र के लिए यूनिकोड पॉइंट पा सकते हैं और स्रोत कोड में यूनिकोड से बच सकते हैं। उदाहरण के लिए, चरित्र A को यूनिकोड से बचने के लिए प्रतिस्थापित किया जा सकता है \u0041

वैसे, आप begin- और अंत लाइन एंकर ^ और $ जब matches() विधि का उपयोग कर उपयोग करने की आवश्यकता नहीं है। matches() विधि का उपयोग करते समय संपूर्ण अनुक्रम नियमित अभिव्यक्ति से मेल खाना चाहिए। एंकर केवल find() विधि के साथ उपयोगी हैं।

38

आपके पास अपनी स्रोत कोड फ़ाइल के साथ एन्कोडिंग समस्या है। यह शायद आईएसओ -885 9 -1 एन्कोडेड है, लेकिन संकलक यूटीएफ -8 का उपयोग करने के लिए सेट किया गया था। यह वर्णों का उपयोग करते समय त्रुटियों में परिणाम देगा, जिसमें यूटीएफ -8 और आईएसओ -885 9 -1 में समान बाइट्स प्रतिनिधित्व नहीं होगा। यह उन सभी पात्रों के साथ होगा जो ASCII का हिस्सा नहीं हैं, उदाहरण के लिए ¬NOT SIGN

आप इसे निम्न प्रोग्राम के साथ अनुकरण कर सकते हैं। यह सिर्फ स्रोत कोड की आपकी लाइन का उपयोग करता है और एक आईएसओ -885 9 -1 बाइट सरणी उत्पन्न करता है और यूटीएफ -8 एन्कोडिंग के साथ यह "गलत" डीकोड करता है। आप देख सकते हैं कि रेखा किस स्थिति में दूषित हो जाती है। मैंने ¬NOT SIGN पर फिट करने के लिए स्थिति 74 को फिट करने के लिए अपने स्रोत कोड पर 2 रिक्त स्थान जोड़े, जो एकमात्र चरित्र है, जो आईएसओ -885 9 -1 एन्कोडिंग और यूटीएफ -8 एन्कोडिंग में विभिन्न बाइट उत्पन्न करेगा। मुझे लगता है कि यह वास्तविक स्रोत फ़ाइल के साथ इंडेंटेशन से मेल खाएगा।

String reg = "  String reg = \"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$\";"; 
String corrupt=new String(reg.getBytes("ISO-8859-1"),"UTF-8"); 
System.out.println(corrupt+": "+corrupt.charAt(74)); 
System.out.println(reg+": "+reg.charAt(74));  

जो निम्नलिखित निर्गम (मार्कअप की वजह से में गड़बड़) में जो परिणाम: https://ideone.com/ShZnB

पर

String reg = "^(?=.[0-9])(?=.[a-z])(?=.[A-Z])(?=.[~#;:?/@&!"'%*=�.,-])(?=[^\s]+$).{8,24}$";: �

String reg = "^(?=.[0-9])(?=.[a-z])(?=.[A-Z])(?=.[~#;:?/@&!"'%*=¬.,-])(?=[^\s]+$).{8,24}$";: ¬

"लाइव" देखें इसे ठीक करने के लिए UTF-8 के साथ स्रोत फ़ाइलों को बचाने के एन्कोडिंग।

+2

धन्यवाद माइकल! मुझे पुराने सीवी सर्वर से चेक किए गए जावा प्रोजेक्ट में समान समस्या थी। तो, इसे ठीक करने के लिए मैंने किया - [फ़ाइल वर्ण एन्कोडिंग निर्धारित करें और बदलें] (http://mindspill.net/computing/linux-notes/determine-and-change-file-character-encoding/): find -name '* .java '-exec लैटिन-1. .UTF-8 {} \; – Gilberto

+3

उत्तर यूटीएफ -8 एन्कोडिंग के साथ स्रोत फ़ाइल को सहेजने के उदाहरण के साथ उत्तर उपयोगी होगा। धन्यवाद! – kellyfj

+0

@kellyfj यह उपयोगकर्ता द्वारा उपयोग किए जाने वाले संपादक पर निश्चित रूप से निर्भर करता है। मुझे लगता है कि प्रत्येक संपादक के पास इस तरह के विकल्प के लिए कुछ मेनू है। –

1

"त्रुटि: यूटीएफ -8 एन्कोडिंग के लिए अप्रत्याशित चरित्र" का अर्थ है, जावा को एक ऐसा चरित्र मिला है जो यूटीएफ -8 में प्रतिनिधित्व नहीं कर रहा है। इसलिए फ़ाइल को एक संपादक में खोलें और अक्षर एन्कोडिंग को यूटीएफ -8 पर सेट करें। आपको एक ऐसा चरित्र ढूंढने में सक्षम होना चाहिए जो यूटीएफ -8 में प्रदर्शित नहीं है। इस चरित्र को हटाएं और पुनः संकलित करें।

9

मैं 2000 में शुरू हुई विरासत प्रणाली के लिए एक लिनक्स बॉक्स पर एक सीआई बिल्ड सर्वर स्थापित करने की प्रक्रिया में हूं। एक ऐसा अनुभाग है जो गैर-यूटीएफ 8 अक्षरों वाले पीडीएफ उत्पन्न करता है। हम रिलीज के अंतिम चरण में हैं, इसलिए मैं मुझे दुःख देने वाले पात्रों को प्रतिस्थापित नहीं कर सकता, फिर भी दिलबर्टेस्क कारणों से, मैं रिलीज के बाद इस मुद्दे को हल करने के लिए एक सप्ताह तक इंतजार नहीं कर सकता। सौभाग्य से, चींटी में "javac" कमांड में "एन्कोडिंग" पैरामीटर है।

<javac destdir="${classes.dir}" classpathref="production-classpath" debug="on" 
    includeantruntime="false" source="${java.level}" target="${java.level}" 

    encoding="iso-8859-1"> 

    <src path="${production.dir}" /> 
</javac> 
3

ग्रहण कोशिश में गुण फ़ाइल (Alt + Enter) में जाने के लिए और संसाधन को बदल - UTF-8 में करने के लिए अन्य> -> 'पाठ फ़ाइल इनकोडिंग'। फ़ाइल को दोबारा खोलें और जांचें कि स्ट्रिंग/फ़ाइल में कहीं जंक कैरेक्टर होगा। इसे हटा दो। फ़ाइल सहेजें।

एन्कोडिंग संसाधन -> 'टेक्स्ट फ़ाइल एन्कोडिंग' को डिफ़ॉल्ट पर वापस बदलें।

कोड संकलित और तैनात करें।

2

धन्यवाद माइकल Konietzka (https://stackoverflow.com/a/4996583/1019307) आपके उत्तर के लिए धन्यवाद।

मैं ग्रहण/एसटीएस में ऐसा किया:

Preferences > General > Content Types > Selected "Text" 
    (which contains all types such as CSS, Java Source Files, ...) 
Added "UTF-8" to the default encoding box down the bottom and hit 'Add' 

बिंगो, त्रुटि चला गया!

-1

मैंने ग्रहण का उपयोग करते समय इस मुद्दे को देखा। मुझे अपनी pom.xml फ़ाइल में एन्कोडिंग जोड़ने की आवश्यकता थी और इसे हल किया गया। http://ctrlaltsolve.blogspot.in/2015/11/encoding-properties-in-maven.html

+0

समस्या पैदा कर रहा था कृपया लिंक केवल उत्तर से बचें। पद में समाधान पर विस्तृत करें। –

3

इंटेलिजे उपयोगकर्ताओं के लिए, यह पता लगाना बहुत आसान है कि मूल एन्कोडिंग क्या थी।

The encoding you've chosen ('[encoding type]') may change the contents of '[Your file]'. Do you want to reload the file from disk or convert the text and save in the new encoding?

तो अगर आप कुछ अजीब एन्कोडिंग में सहेजी कुछ वर्ण हैं तो आप क्या आपको क्या करना चाहिए: आप अपने विंडो के निचले दाएं कोने से एन्कोडिंग का चयन कर सकते हैं, तो आप एक संवाद बॉक्स कहने के साथ प्रेरित किया जाएगा पहले खराब अक्षरों के एन्कोडिंग में फ़ाइल लोड करने के लिए 'रीलोड' का चयन करें। मेरे लिए यह बदल गया? पात्रों को उनके उचित मूल्य में।

इंटेलिजे बता सकता है कि क्या आपने संभवतः सही एन्कोडिंग नहीं चुना है और आपको चेतावनी देगा। वापस वापस करें और पुनः प्रयास करें।

एक बार जब आप बुरे पात्रों को दूर कर सकते हैं, तो नीचे दिए गए दाएं कोने में एन्कोडिंग चयन बॉक्स को मूल रूप से इच्छित प्रारूप में बदलें (यदि आप इस त्रुटि संदेश को गुगल कर रहे हैं, तो यह संभवतः यूटीएफ -8 होगा)। इस बार संवाद पर 'कन्वर्ट' बटन का चयन करें।

मेरे लिए, मुझे 'विंडोज -1252' के रूप में पुनः लोड करने की आवश्यकता है, फिर वापस 'यूटीएफ -8' में परिवर्तित करें। अपमानजनक पात्र एकल उद्धरण ('और') थे जो गलत शब्दकोष के साथ वर्ड डॉक (या ई-मेल) से चिपकाए गए थे, और उपर्युक्त क्रियाएं उन्हें यूटीएफ -8 में परिवर्तित कर देगी।

संबंधित मुद्दे