2011-04-20 12 views
12

मैं जावा में स्ट्रिंग का यूनिकोड मान कैसे प्राप्त कर सकता हूं?जावा स्ट्रिंग यूनिकोड वैल्यू

उदाहरण के लिए यदि स्ट्रिंग मैं \ uXXXX \ uXXXX

+3

क्यों? वास्तव में आप क्या करने की कोशिश कर रहे हैं? 'charAt()' मदद करेगा। यदि आप यूटीएफ -16 कोड इकाइयों के बजाय यूनिकोड कोडपॉइंट चाहते हैं, तो 'codePointAt() 'अधिक सही दृष्टिकोण है (लेकिन अगर आप जावा स्रोत कोड या इसी तरह से बचने के लिए लिखना चाहते हैं तो इससे मदद नहीं मिलेगी)। –

+0

सब कुछ सरल बनाने के लिए, मेरे पास एक स्ट्रिंग है जो जावा स्रोत फ़ाइल से अंग्रेजी में है। यह जापानी में परिवर्तित हो जाता है। इसके बाद मुझे \ uXXXX यूनिकोड मान की आवश्यकता है क्योंकि अंग्रेजी स्ट्रिंग को स्रोत फ़ाइल में जापानी के साथ बदल दिया जाएगा। – user489041

+0

@user: उस मामले में 'charAt()' द्वारा 4-अंकों की हेक्स संख्या के रूप में मूल्य वापसी को स्वरूपित करना और \ n' को काम करना चाहिए। –

उत्तर

18

कुछ यूनिकोड वर्ण दो जावा वर्णों का विस्तार करते हैं। http://docs.oracle.com/javase/tutorial/i18n/text/unicode.html से उद्धरण:

मूल्यों कि 16-बिट सीमा के बाहर हैं, और 0x10000 से 0x10FFFF को सीमा के भीतर के साथ वर्ण, अनुपूरक वर्ण कहा जाता है और चार मूल्यों की एक जोड़ी के रूप में परिभाषित कर रहे हैं।

गैर- ASCII से बचने के लिए सही तरीका:

private static String escapeNonAscii(String str) { 

    StringBuilder retStr = new StringBuilder(); 
    for(int i=0; i<str.length(); i++) { 
    int cp = Character.codePointAt(str, i); 
    int charCount = Character.charCount(cp); 
    if (charCount > 1) { 
     i += charCount - 1; // 2. 
     if (i >= str.length()) { 
     throw new IllegalArgumentException("truncated unexpectedly"); 
     } 
    } 

    if (cp < 128) { 
     retStr.appendCodePoint(cp); 
    } else { 
     retStr.append(String.format("\\u%x", cp)); 
    } 
    } 
    return retStr.toString(); 
} 
+0

अच्छा! अच्छा उदाहरण – user489041

11

इस विधि एक मनमाना String एक ASCII सुरक्षित प्रतिनिधित्व करने के लिए जावा स्रोत कोड में इस्तेमाल किया जाएगा (या गुण फ़ाइलों में कनवर्ट करता है की तरह कुछ की जरूरत है "हाय" है, उदाहरण के लिए):

public String escapeUnicode(String input) { 
    StringBuilder b = new StringBuilder(input.length()); 
    Formatter f = new Formatter(b); 
    for (char c : input.toCharArray()) { 
    if (c < 128) { 
     b.append(c); 
    } else { 
     f.format("\\u%04x", (int) c); 
    } 
    } 
    return b.toString(); 
} 
+0

बहुत बढ़िया, पूरी तरह से काम किया। धन्यवाद – user489041

+1

@ user489041: मैं असहमत हूं: ऐसा करने का सही तरीका 'जावा-एन्कोडिंग यूटीएफ -8' के साथ संकलित करना है। कोई गड़बड़ नहीं, कोई झगड़ा नहीं। यह विशेष रूप से 20 साल बाद है, जावा के पास अभी भी उनके आधिकारिक नामों से कोड पॉइंट्स के बारे में बात करने का कोई मानक तरीका नहीं है। इसका मतलब है कि आप अपने कोड में बुराई और रहस्यमय जादू संख्या डालने की कोशिश कर रहे हैं। ये अच्छी बात नहीं है! निश्चित रूप से, मैं "α" की तुलना में "\ N {ग्रीक लघु पत्र अल्फा}" देख सकता हूं, लेकिन मैं ** निश्चित रूप से ** "\ u03B1" देखना नहीं चाहता! यह सिर्फ दुष्ट है। आप इस तरह के क्रूडोला को कैसे बनाए रखने जा रहे हैं? – tchrist

+0

केवल 4 अंक? यूनिकोड 32 बिट चरित्र सेट है और ओपी जापानी की बात करता है। – Martin

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