2011-02-14 10 views
7

मेरे पास एक फ़ाइल है जिसमें स्ट्रिंग हैंड को \ u00C3 के रूप में टाइप किया गया है। मैं एक यूनिकोड चरित्र बनाना चाहता हूं जिसे जावा में उस यूनिकोड द्वारा दर्शाया जा रहा है। मैंने कोशिश की लेकिन कैसे नहीं मिला। मदद।जावा: स्ट्रिंग " u00C3" आदि से यूनिकोड कैसे बनाएं

संपादित करें: जब मैं टेक्स्ट फ़ाइल पढ़ता हूं स्ट्रिंग में "\ u00C3" यूनिकोड के रूप में नहीं होगा लेकिन ASCII वर्ण '' '' '' '0' '0' '3' के रूप में होगा। मैं उस ASCII स्ट्रिंग से यूनिकोड चरित्र बनाना चाहता हूं।

+0

फ़ाइल स्वरूपित कैसे है? क्या वे एक रेखा से तार करते हैं, या क्या? –

+0

हाँ, यह की अपनी लाइन में हर एक (खेद मैं लाइन पुन: पेश नहीं कर सकते टूट जाता है बेरे) \ u0103 \ u0104 \ u0105 \ u01CD – Ravi

उत्तर

7

मैं वेब पर कहीं इस उठाया:

String unescape(String s) { 
    int i=0, len=s.length(); 
    char c; 
    StringBuffer sb = new StringBuffer(len); 
    while (i < len) { 
     c = s.charAt(i++); 
     if (c == '\\') { 
      if (i < len) { 
       c = s.charAt(i++); 
       if (c == 'u') { 
        // TODO: check that 4 more chars exist and are all hex digits 
        c = (char) Integer.parseInt(s.substring(i, i+4), 16); 
        i += 4; 
       } // add other cases here as desired... 
      } 
     } // fall through: \ escapes itself, quotes any character but u 
     sb.append(c); 
    } 
    return sb.toString(); 
} 
+0

आकर्षण की तरह काम किया - धन्यवाद मैं अच्छा 4 घंटे संघर्ष कर रहा था। अगर मैं समाधान ढूंढने के लिए Google में खोज कर सकता हूं :) – Ravi

+0

जैसा कि मुझे याद है, यह 'जावा अनस्केप स्ट्रिंग' जैसा था –

0

शायद पंक्तियों के साथ कुछ:

Scanner s = new Scanner(new File("myNumbers")); 
while(s.hasNextLine()) { 
    System.out.println( 
     Character.valueOf( 
      (char)(int) Integer.valueOf(
       s.nextLine().substring(2,6), 16 
      ) 
     ) 
    ); 
3

डैंग, मैं थोड़ा धीमा था।

package ravi; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.util.regex.Pattern; 
public class Ravi { 

    private static final Pattern UCODE_PATTERN = Pattern.compile("\\\\u[0-9a-fA-F]{4}"); 

    public static void main(String[] args) throws Exception { 
     BufferedReader br = new BufferedReader(new FileReader("ravi.txt")); 
     while (true) { 
      String line = br.readLine(); 
      if (line == null) break; 
      if (!UCODE_PATTERN.matcher(line).matches()) { 
       System.err.println("Bad input: " + line); 
      } else { 
       String hex = line.substring(2,6); 
       int number = Integer.parseInt(hex, 16); 
       System.out.println(hex + " -> " + ((char) number)); 
      } 
     } 
    } 

} 
0

आप केवल यूनिकोड और कुछ नहीं से बचने के लिए चाहते हैं, तो प्रोग्राम के रूप में, आप एक समारोह बना सकते हैं:

यहाँ मेरी समाधान है
private String unicodeUnescape(String string) { 
    return new UnicodeUnescaper().translate(string); 
} 

यह org.apache.commons.text.translate.UnicodeUnescaper का उपयोग करता है।

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