2013-05-27 9 views
15

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

char c = "\u041f".toCharArray()[0]; 

मैं पार्सिंग के लिए Integer.valueOf() की तरह अधिक सुरुचिपूर्ण कुछ के लिए उम्मीद की गई थी।

हेक्साडेसिमल यूनिकोड को ठीक से उत्पन्न करने के बारे में कैसे?

+0

मैंने एक उत्तर पोस्ट किया लेकिन मुझे लगता है कि मैं इसे आप जो चाहते हैं उससे पीछे कर सकता हूं। क्या आप आउटपुट के उदाहरण के साथ स्पष्टीकरण दे सकते हैं? – noel

+0

कहें, चरित्र के लिए, मुझे यहां सूचीबद्ध '00F6' चाहिए: http://en.wikipedia.org/wiki/List_of_Unicode_characters – JVerstry

+0

ठीक है, तो मेरा उत्तर काम करना चाहिए। – noel

उत्तर

6

कुछ गहरी पढ़ने करने के बाद, जावाडोक char मापदंडों के आधार पर सभी यूनिकोड मूल्यों का समर्थन नहीं करते Character तरीकों कहते हैं, लेकिन उन लेने कोड पॉइंट्स (यानी, int) से करते हैं।

इसलिए, मैं है निम्न परीक्षण प्रदर्शन कर रहा:

int codePointCopyright = Integer.parseInt("00A9", 16); 

    System.out.println(Integer.toHexString(codePointCopyright)); 
    System.out.println(Character.isValidCodePoint(codePointCopyright)); 

    char[] toChars = Character.toChars(codePointCopyright); 
    System.out.println(toChars); 

    System.out.println(); 

    int codePointAsian = Integer.parseInt("20011", 16); 

    System.out.println(Integer.toHexString(codePointAsian)); 
    System.out.println(Character.isValidCodePoint(codePointAsian)); 

    char[] toCharsAsian = Character.toChars(codePointAsian); 
    System.out.println(toCharsAsian); 

और मैं हो रही है:

enter image description here

इसलिए, मैं अपने सवाल में char के बारे में बात नहीं करना चाहिए, बल्कि के बारे में वर्णों की सरणी, क्योंकि यूनिकोड वर्णों को एक से अधिक char के साथ प्रदर्शित किया जा सकता है। दूसरी तरफ, int इसमें सभी शामिल हैं।

+0

ठीक है आप अपने प्रश्न में चार के बारे में बात करने का अधिकार रखते हैं, यह जावा है जो टूटा हुआ है और कोडर को एन्कोडिंग विस्तार स्तर WRT पर यूनिकोड पूरक पर तारों के साथ दखल देने के लिए मजबूर करता है। –

13

यह चार के एक हेक्स स्ट्रिंग प्रतिनिधित्व उत्पन्न करेगा:

char ch = 'ö'; 
String hex = String.format("%04x", (int) ch); 

और यह एक चार में हेक्स स्ट्रिंग वापस परिवर्तित कर देंगे:

int hexToInt = Integer.parseInt(hex, 16); 
char intToChar = (char)hexToInt; 
+0

पहला मुझे देता है> char [] से int – Machado

+0

@ होल्म्स से नहीं डाला जा सकता है मुझे openjdk 1.8.0_65 और javac 1.8.0_60 का उपयोग करने में कोई समस्या नहीं थी। या तो उपरोक्त या 'char c =' \ u041f '; '(जो पी है) या' \ u4e2d' (जो कि 中 है) का उपयोग कर रहा है। मैं एक महजोंग टाइल '(जो मूल बहुभाषी विमान से बाहर है, और इस प्रकार चार द्वारा प्रतिनिधित्व योग्य नहीं है) के साथ संकलित नहीं कर सका इसलिए यह आश्चर्यजनक नहीं है)। – Eponymous

5

स्ट्रिंग स्तर पर: निम्नलिखित चीनी का उपयोग नहीं करते हैं, लेकिन चीनी के लिए int कहते हैं, लेकिन यह वर्णों के लिए भी पर्याप्त है।

int cp = "\u041f".codePointAt(0); 
    String s = new String(Character.toChars(cp)); 

native2ascii स्तर पर: आप आगे और पीछे \uXXXX और यूनिकोड वर्ण के बीच परिवर्तित करने के लिए चाहते हैं, अपाचे से उपयोग करते हैं, आम-लैंगStringEscapeUtils:

String t = StringEscapeUtils.escapeJava(s + "ö"); 
    System.out.println(t); 

पर कमांड लाइन देशी 2ascii यू-एस्केप के बीच पीछे और आगे फ़ाइलों को परिवर्तित कर सकता है और यूटीएफ -8 कह सकता है।

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