जावा के साथ UTF-8 फ़ाइल कैसे लिखें?


180

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

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

यह मेरे पास है, किसी भी मदद वास्तव में सराहना की

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
यदि संभव हो तो संकलक पास करने वाले कोड को पोस्ट करें।
जेस्पर

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

जवाबों:


208

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

try (OutputStreamWriter writer =
             new OutputStreamWriter(new FileOutputStream(PROPERTIES_FILE), StandardCharsets.UTF_8))
    // do stuff
}

117
... और सन पर शाप फाइलविटर के लिए एक कंस्ट्रक्टर में नहीं डालना जो एक चारसेट लेता है।
जॉन स्कीट

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

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

क्षमा करें, मेरा मतलब आउटपुटस्ट्रीमवेयर के लिए था, फाइलऑउटपुट स्ट्रीम के लिए नहीं।
पॉवरलॉर्ड

198

इसे इस्तेमाल करे

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

1
मुझे लगता है कि एक टाइपो है। Writer out = ...को सुधारा जाना चाहिए BufferedWriter out = ...
14-16 को asmaier

20
लेखक सार वर्ग है, बफ़रड्राइवर कार्यान्वित हो रहा है और लिखना () + पास () घोषित हैं।
मार्कस लोसबर्ग

3
यह बिना UTM-8 के BOM के बिना एक वास्तविक UTF-8 बनाता है। वहाँ एक तरीका है कि मजबूर करने के लिए है?
neverMind

25

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

आपको कुछ ऐसा करने में सक्षम होना चाहिए:

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

यदि यह मौजूद नहीं है तो यह फ़ाइल बनाएगा।


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

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

मैं FileUtils क्लास में 'राइट (..)' विधि नहीं देख सका। मैंने कॉमन्स IO 1.4
RRM

यदि आप प्रश्न में दिखाए गए लिंक पर जावा डॉक्स पढ़ते हैं, तो यह आपको कॉमन्स आईओ एपीआई का संस्करण बताता है जहां राइट एपीआई शुरू किए गए थे। ऐसा लगता है कि लेखन API को v2.0 के बाद से पेश किया गया था।
a_M

बस यह उल्लेख करना चाहूंगा कि मैंने FileUtils.write (...) के बजाय FileUtils.writeStringToFile (...) (commons-io-1.3.1.jar के साथ) का उपयोग किया।
लेआ मेसियोट

21

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

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


जहाँ तक मैं बता सकता हूँ, बग यह है (क्योंकि उस लेख के लेखक इसका उल्लेख करने की जहमत नहीं उठाते हैं
क्रिस

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

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

@Crris Bugs.sun.com लिंक टूट गया है। क्या आपके पास एक काम है?
मथायस

फिर भी मेरे लिए काम करता है; मैं लॉग इन या कुछ भी नहीं कर रहा हूँ। बग 4508058 के लिए googling का प्रयास करें।
क्रिस

21

जावा 7 के बाद से आप Files.newBufferedWriterथोड़े अधिक रसीले तरीके से ऐसा कर सकते हैं :

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

9
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();

6

जावा 7 फ़ाइलें उपयोगिता प्रकार फाइलों के साथ काम के लिए उपयोगी है:

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));
  }
}

जावा 8 संस्करण आप छोड़ करने की अनुमति देता वर्णसेट UTF-8 में तरीकों डिफ़ॉल्ट - तर्क।


3

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

या यहां क्लिक करें

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

3

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

    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();

    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.