জাভা দিয়ে কোনও ইউটিএফ -8 ফাইল কীভাবে লিখবেন?


180

আমার কিছু বর্তমান কোড আছে এবং সমস্যাটি এটির একটি 1252 কোডেপ ফাইল তৈরি করা হচ্ছে, আমি এটি ইউটিএফ -8 ফাইল তৈরি করতে বাধ্য করতে চাই

কেউ কি এই কোডটি সম্পর্কে আমাকে সহায়তা করতে পারে, যেমন আমি বলেছি এটি বর্তমানে কাজ করে ... তবে আমাকে ইউটিএফ-তে সংরক্ষণ করার জন্য জোর করা দরকার .. আমি কি কোনও পরামিতি বা কিছু পাস করতে পারি ??

এটি আমার কাছে রয়েছে, কোনও সহায়তা সত্যিই প্রশংসিত

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
যদি সম্ভব হয় তবে কোডটি পোস্ট করুন যা সংকলকটি পাস করবে।
জেস্পেআর

এটি গণ্ডার (জাভাস্ক্রিপ্ট) বলে মনে হচ্ছে
ডিএফএ

উত্তর:


208

পরিবর্তে ব্যবহার করার জন্য FileWriter, একটি তৈরি করুন FileOutputStream। তারপরে আপনি এটিতে মুড়ে রাখতে পারেন OutputStreamWriter, যা আপনাকে কনস্ট্রাক্টরে একটি এনকোডিং পাস করতে দেয়। তারপরে আপনি আপনার ডেটা সেই সাথে একটি সংস্থান-সংস্থার বিবৃতিতে লিখতে পারেন :

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

117
... এবং সান অভিশাপ দিয়ে ফাইল রাইটারে কোনও কনস্ট্রাক্টর রাখেনি যা একটি চরসেট নেয়।
জন স্কিটি

3
এটি একটি বিজোড় দর্শন মত মনে হচ্ছে না। এবং তারা এখনও এটি স্থির করেনি।
স্কাফম্যান

4
@ জোন স্কিটি: ফাইল রাইটারটি ফাইলআউটপুট স্ট্রিমের জন্য একটি মোড়ক যা ডিফল্ট এনকোডিং এবং বাফার আকার ধরেছে, তাতে কি পয়েন্টটি পরাস্ত হবে না?
পাওয়ারলর্ড

দুঃখিত, আমি আউটপুট স্ট্রিম রাইটার বলতে চাইছি, ফাইলআউটপুটস্ট্রিমের জন্য নয়
পাওয়ারলর্ড

198

এটা চেষ্টা কর

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

1
আমার মনে হয় একটি টাইপো আছে। Writer out = ...সংশোধন করা উচিত BufferedWriter out = ...
asmaier

20
লেখক অ্যাবস্ট্রাক্ট ক্লাস, বাফার্ড রাইটার বাস্তবায়ন করছে এবং লিখুন () + নিকট () ঘোষিত হয়েছে।
মার্কাস লসবার্গ

3
এটি কেবল ইউটিএফ -8 নয়, বিওএম ছাড়াই প্রকৃত ইউটিএফ -8 তৈরি করে। জোর করার কোন উপায় আছে কি?
কখনই মনে রাখবেন না

25

FileUtils.writeঅ্যাপাচি কমন্স থেকে ব্যবহার করার চেষ্টা করুন ।

আপনার মতো কিছু করতে সক্ষম হওয়া উচিত:

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

এটি উপস্থিত না থাকলে ফাইলটি তৈরি করবে।


4
এটি বিএমবি ছাড়াও ইউটিএফ -8 ফাইল তৈরি করে ... এটি প্রাসঙ্গিক কিনা তা আমি জানি না।
কখনই মনে রাখবেন না

3
@ স্মার্টটি কেবলমাত্র যদি আপনি ইতিমধ্যে অ্যাপাচি কমন্স ব্যবহার করছেন। অন্যথায় এটি আরও জার অন্তর্ভুক্ত করা একটি ভয়াবহ বর্জ্য বলে মনে হচ্ছে কারণ আপনি আরও কয়েকটি চরিত্র লিখতে চান না।
জেসন

আমি ফাইলUtils ক্লাসে একটি 'রাইটিং (..)' পদ্ধতিটি দেখতে পেলাম না। আমি কমন্সে আইও 1.4 টি পরীক্ষা করে দেখেছি
আরআরএম

যদি আপনি প্রশ্নের মধ্যে প্রদর্শিত লিঙ্কটিতে জাভা ডক্সটি পড়েন তবে এটি আপনাকে কমন্স আইও এপিআইয়ের সংস্করণটি জানায় যেখানে লিখনের API গুলি প্রবর্তিত হয়েছিল। দেখে মনে হচ্ছে লেখার API গুলি v2.0 থেকে চালু হয়েছিল introduced
এ_এম

কেবল উল্লেখ করতে চাই যে আমি ফাইলUtils.write (...) এর পরিবর্তে ফাইলUtils.writStringToFile (...) (Commons-io-1.3.1.jar সহ) পদ্ধতিটি ব্যবহার করেছি।
লায়া ম্যাসিয়ট

21

জাভা ইউটিএফ -8 লেখাটি বাগড হওয়ার পরে এখানে দেওয়া সমস্ত উত্তরই কাজ করবে না।

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


আমি যতদূর বলতে পারি, বাগটি এটি হ'ল (যেহেতু নিবন্ধটির লেখক এটি উল্লেখ করা বিরক্ত করে না): bugs.sun.com/view_bug.do?bug_id=4508058
ক্রিস

4
লেখার সময় একমাত্র সমস্যা হ'ল বিএম নিখোঁজ। কোন ব্যাপারই না. অন্যদিকে কোনও বিওএম দিয়ে একটি ফাইল পড়ার জন্য ম্যানুয়ালি এড়িয়ে যাওয়া দরকার।
অ্যাক্সেল ফন্টেইন

2
ইউটিএফ -8 এর বিওএম দরকার নেই, সুতরাং প্রযুক্তিগতভাবে লিখিত ফাইলটি এখনও একটি বৈধ ইউটিএফ -8 এনকোডযুক্ত পাঠ্য ফাইল। বাগটি বিওএম সহ একটি ইউটিএফ -8 পড়ার সাথে রয়েছে।
কিয়েন ট্রুং

@ ক্রিস দি বাগস.সুন.কম লিঙ্কটি নষ্ট হয়েছে। আপনার কি কাজ করে?
ম্যাথিয়াস

এখনও আমার পক্ষে কাজ করে; আমি লগ ইন বা কিছু না। বাগ 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 সংস্করণ আপনি বাদ করতে পারবেন charset UTF-8- পদ্ধতি ডিফল্ট - যুক্তি।


3

আমরা জাটি দিয়ে ইউটিএফ -8 এনকোডযুক্ত ফাইলটি প্রিন্ট রাইটার ব্যবহার করে ইউটিএফ -8 এনকোডেড এক্সএমএল ব্যবহার করতে পারি

বা এখানে ক্লিক করুন

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

    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.