2009-06-16 14 views
154

मैं कुछ मौजूदा कोड है और समस्या अपने एक 1252 कोडपेज फ़ाइल बनाने है, मैं बनाने के लिए इसका बाध्य करना चाहते हैं एक UTF-8 फ़ाइलजावा के साथ यूटीएफ -8 फ़ाइल कैसे लिखें?

किसी को भी मुझे इस कोड के साथ मदद कर सकते हैं, के रूप में मैं कहना है कि यह वर्तमान में काम करता है .. लेकिन मुझे utf पर सहेजने की आवश्यकता है .. क्या मैं पैरामीटर या कुछ पास कर सकता हूं ??

इस मैं क्या है, किसी भी मदद वास्तव में इसके बजाय FileWriter का उपयोग करने का

var out = new java.io.FileWriter(new java.io.File(path)), 
     text = new java.lang.String(src || ""); 
    out.write(text, 0, text.length()); 
    out.flush(); 
    out.close(); 
+2

यदि संभव हो तो संकलक पास करता है जो कोड पोस्ट करें। – JesperE

+0

ऐसा लगता है कि यह राइनो (जावास्क्रिप्ट) – dfa

उत्तर

167

सराहना की, एक FileOutputStream पैदा करते हैं। फिर आप इसे OutputStreamWriter में लपेट सकते हैं, जो आपको कन्स्ट्रक्टर में एन्कोडिंग पास करने की अनुमति देता है। तो फिर तुम कि करने के लिए अपने डेटा को लिख सकते हैं:

OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(PROPERTIES_FILE), StandardCharsets.UTF_8) 
+106

... और सूर्य पर अभिशाप फ़ाइलवाइटर को एक कन्स्ट्रक्टर में नहीं डालता है जो एक वर्णसेट लेता है। –

+2

यह एक अजीब निरीक्षण की तरह प्रतीत होता है। और उन्होंने अभी भी इसे ठीक नहीं किया है। – skaffman

+3

@ जोन स्कीट: यह देखते हुए कि FileWriter FileOutputStream के लिए एक रैपर है जो डिफ़ॉल्ट एन्कोडिंग और बफर आकार मानता है, क्या वह बिंदु को पराजित नहीं करेगा? – Powerlord

181

प्रयास करें इस

Writer out = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("outfilename"), "UTF-8")); 
try { 
    out.write(aString); 
} finally { 
    out.close(); 
} 
+1

मुझे लगता है कि एक टाइपो है। लेखक बाहर = ...' 'BufferedWriter out = ...' को सही किया जाना चाहिए। – asmaier

+18

लेखक सार वर्ग है, BufferedWriter कार्यान्वित और लिख रहा है() + बंद() घोषित किया जाता है। –

+3

यह बीओएम के बिना वास्तविक यूटीएफ -8 बनाता है, न केवल यूटीएफ -8। क्या बल देने का कोई तरीका है? – neverMind

8
var out = new java.io.PrintWriter(new java.io.File(path), "UTF-8"); 
text = new java.lang.String(src || ""); 
out.print(text); 
out.flush(); 
out.close(); 
18

अपाचे कॉमन्स से FileUtils.write का उपयोग करें।

File f = new File("output.txt"); 
FileUtils.writeStringToFile(f, document.outerHtml(), "UTF-8"); 

यह अगर यह मौजूद नहीं है फ़ाइल बनाने जाएगा:

आप की तरह कुछ करने के लिए सक्षम होना चाहिए।

+3

यह एक फ़ाइल यूटीएफ -8 WIthout BOM भी बनाता है ... मुझे नहीं पता कि यह प्रासंगिक है या नहीं। – neverMind

+3

@ स्मारक केवल तभी आप अपाचे कॉमन्स का उपयोग कर रहे हैं। अन्यथा यह एक और जार शामिल करने के लिए एक भयानक अपशिष्ट लगता है क्योंकि आप कुछ और अक्षर लिखना नहीं चाहते हैं। – Jason

+0

मैं FileUtils कक्षा में 'लिखना (..)' विधि नहीं देख सका। मैंने कॉमन्स आईओ 1.4 – RRM

21

जावा के यूटीएफ -8 लेखन के बाद यहां दिए गए सभी उत्तर काम नहीं कर पाएंगे।

http://tripoverit.blogspot.com/2007/04/javas-utf-8-and-unicode-writing-is.html

+0

जहां तक ​​मैं कह सकता हूं, बग यह है (क्योंकि उस लेख के लेखक ने इसका उल्लेख करने के लिए परेशान नहीं किया है): http://bugs.sun.com/view_bug.do?bug_id=4508058 – Chris

+4

एकमात्र मुद्दा जब लापता बीओएम लिख रहा है। कोई बड़ी बात नहीं। दूसरी ओर एक बीओएम के साथ एक फाइल को पढ़ने के लिए इसे मैन्युअल रूप से अलग करना आवश्यक है। –

+2

यूटीएफ -8 को बीओएम की आवश्यकता नहीं है, इसलिए तकनीकी रूप से लिखित फ़ाइल अभी भी वैध यूटीएफ -8 एन्कोडेड टेक्स्ट फ़ाइल है। बम बीओएम के साथ एक यूटीएफ -8 पढ़ने के साथ है। – Dikei

3

हम UTF-8 एन्कोडेड एक्सएमएल

लिखने या क्लिक करने के लिए उपयोग PrintWriter का उपयोग कर जावा के साथ UTF-8 एन्कोडेड फ़ाइल लिख सकते हैं here

PrintWriter out1 = new PrintWriter(new File("C:\\abc.xml"), "UTF-8"); 
5

Java 7 Files utility type के लिए उपयोगी है फाइलों के साथ काम करना:

import java.nio.charset.StandardCharsets; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.io.IOException; 
import java.util.*; 

public class WriteReadUtf8 { 
    public static void main(String[] args) throws IOException { 
    List<String> lines = Arrays.asList("These", "are", "lines"); 

    Path textFile = Paths.get("foo.txt"); 
    Files.write(textFile, lines, StandardCharsets.UTF_8); 

    List<String> read = Files.readAllLines(textFile, StandardCharsets.UTF_8); 

    System.out.println(lines.equals(read)); 
    } 
} 

Java 8 version आपको चार्सेट तर्क को छोड़ने की अनुमति देता है - यूटीएफ -8 के लिए डिफ़ॉल्ट तरीके।

13

जावा 7 चूंकि आप एक छोटे से अधिक संक्षेप Files.newBufferedWriter साथ भी ऐसा ही कर सकते हैं:

Path logFile = Paths.get("/tmp/example.txt"); 
try (BufferedWriter writer = Files.newBufferedWriter(logFile, StandardCharsets.UTF_8)) { 
    writer.write("Hello World!"); 
    .. 
} 
+2

यह शीर्ष पर होना चाहिए! –

2

नमूना कोड के नीचे लाइन द्वारा फ़ाइल लाइन पढ़ सकते हैं और UTF-8 प्रारूप में नई फ़ाइल लिख सकते हैं। इसके अलावा, मैं स्पष्ट रूप से सीपी 1252 एन्कोडिंग निर्दिष्ट कर रहा हूं।

public static void main(String args[]) throws IOException { 

    BufferedReader br = new BufferedReader(new InputStreamReader(
      new FileInputStream("c:\\filenonUTF.txt"), 
      "Cp1252")); 
    String line; 

    Writer out = new BufferedWriter(
      new OutputStreamWriter(new FileOutputStream(
        "c:\\fileUTF.txt"), "UTF-8")); 

    try { 

     while ((line = br.readLine()) != null) { 

      out.write(line); 
      out.write("\n"); 

     } 

    } finally { 

     br.close(); 
     out.close(); 

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