2013-07-28 7 views
7

लिए वर्ण एन्कोडिंग निर्दिष्ट करने के लिए एक रास्ता है या मैं के साथ फंस कर रहा हूँ:वहाँ java.lang.StringBuilder

String s = new String(new byte[0], Charset.forName("ISO-8859-1")); 
// or ISO_8859_1, or LATIN-1 or ... still no constants for those 
for (String string : strings) { // those are ISO-8959-1 encoded 
    s += string; // hopefully this preserves the encoding (?) 
} 
+1

पाठ करने के लिए लिखित या से पढ़ा एक फ़ाइल या स्ट्रीम विशेष रूप से एन्कोड किया जा सकता है। –

उत्तर

13

स्ट्रिंग्स हमेशा जावा में UTF-16-एनकोडेड हैं। वे char मानों के अनुक्रम हैं, जो यूटीएफ -16 कोड इकाइयां हैं। जब आप String(byte[], String) कन्स्ट्रक्टर को एन्कोडिंग निर्दिष्ट करते हैं, तो यह केवल कहता है कि पाठ में बाइट को कैसे डीकोड करना है - एन्कोडिंग बाद में त्याग दिया जाता है।

यदि आपको एन्कोडिंग को संरक्षित करने की आवश्यकता है, तो आपको Charset और String को एक साथ रखने के लिए अपनी खुद की कक्षा बनाना होगा। मैं यह नहीं कह सकता कि मैं कभी ऐसा करना चाहता था - क्या आपको वाकई यकीन है कि आपको इसकी आवश्यकता है?

(तो अपने "के साथ फंस" कोड वैसे भी काम करेगा नहीं - और यह भी अक्षम हो जाएगा।)

+1

@ होवरक्राफ्टफुलऑफेल: "आपका" शुरू करने के लिए सही था - प्रश्न में कोड ओपी को "संबंधित" है। "आप हैं" बस इस संदर्भ में काम नहीं करता है। –

+0

"आपका" कोड "अटक गया" वैसे भी काम नहीं करेगा - और यह भी अक्षम होगा "- यही कारण है कि मैंने अटक गया - जवाब के लिए धन्यवाद, मुझे लगता है कि अब मैंने इसे पचाया है! –

+0

@Mr_and_Mrs_D: "या मैं फंस गया हूं" मुझे बताता है कि आपके पास कोड है जो आप नापसंद करते हैं, लेकिन समस्या के आसपास काम करेंगे - इस मामले में इसमें * नहीं * लाभ होंगे। खुशी है कि अब आपको "मिल गया" है :) –

2

कैसे के बारे में कैशिंग के साथ कनवर्टर का उपयोग करने के लिए:

public static void main(String args[]) throws IOException { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(1<<10); 
    OutputStreamWriter osw = null; 
    try { 
     osw = new OutputStreamWriter(baos, "UTF-8"); 
    } catch (UnsupportedEncodingException ex) { 
    } 
    osw.write("Привет!"); 
    osw.flush(); 
    System.out.println("Hello: " + baos.toString("UTF-8")); 
}