如何用Java编写UTF-8文件?
我有一些当前代码,问题是它创建了一个1252代码页文件,我想强制它创建一个UTF-8文件 有人能帮我写这段代码吗,就像我说的,它现在可以工作了。。。但我需要在utf上强制保存。。我可以传递一个参数或什么吗 这就是我所拥有的,非常感谢你的帮助如何用Java编写UTF-8文件?,java,file-io,utf-8,Java,File Io,Utf 8,我有一些当前代码,问题是它创建了一个1252代码页文件,我想强制它创建一个UTF-8文件 有人能帮我写这段代码吗,就像我说的,它现在可以工作了。。。但我需要在utf上强制保存。。我可以传递一个参数或什么吗 这就是我所拥有的,非常感谢你的帮助 var out = new java.io.FileWriter( new java.io.File( path )), text = new java.lang.String( src || "" ); out.write( tex
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();
不要使用
FileWriter
,而是创建FileOutputStream
。然后,您可以将其包装到一个OutputStreamWriter
,它允许您在构造函数中传递编码。然后,您可以将数据写入
试试这个
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("outfilename"), "UTF-8"));
try {
out.write(aString);
} finally {
out.close();
}
尝试使用apachecommons
您应该能够执行以下操作:
File f = new File("output.txt");
FileUtils.writeStringToFile(f, document.outerHtml(), "UTF-8");
如果文件不存在,这将创建该文件。这里给出的所有答案都不起作用,因为java的UTF-8编写存在错误
我们可以使用java编写UTF-8编码文件 使用PrintWriter编写UTF-8编码的xml 或者点击 用于处理文件的:
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.nio.charset.StandardCharset;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.io.IOException;
导入java.util.*;
公共类writeradutf8{
公共静态void main(字符串[]args)引发IOException{
列表行=数组.asList(“这些”、“是”、“行”);
Path textFile=Path.get(“foo.txt”);
写入(文本文件、行、标准字符集.UTF_8);
List read=Files.readAllLines(textFile,StandardCharsets.UTF_8);
System.out.println(line.equals(read));
}
}
允许您省略Charset参数-方法默认为UTF-8。自Java 7以来,您可以对
文件执行相同的操作。newBufferedWriter
更简洁一点:
Path logFile = Paths.get("/tmp/example.txt");
try (BufferedWriter writer = Files.newBufferedWriter(logFile, StandardCharsets.UTF_8)) {
writer.write("Hello World!");
// ...
}
下面的示例代码可以逐行读取文件并以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();
}
}
如果可能,请发布通过编译器的代码。它似乎是rhino(javascript)。。。诅咒Sun没有给FileWriter添加一个带字符集的构造函数。这看起来确实是一个奇怪的疏忽。Jon Skeet:既然FileWriter是FileOutputStream的包装器,它假定默认的编码和缓冲区大小,那就不能解决问题了吗?对不起,我是说OutputStreamWriter,而不是FileOutputStream。我想这是个打字错误
Writer out=…
应更正为BufferedWriter out=
.Writer是抽象类,BufferedWriter正在实现,write()+close()被声明。这将创建一个没有BOM的实际UTF-8,而不仅仅是UTF-8。有什么办法可以强制这样做吗?据我所知,这个bug就是(因为那篇文章的作者没有提及):编写时唯一的问题是缺少BOM。没什么大不了的。另一方面,读取带有BOM的文件需要手动剥离。UTF-8不需要BOM,因此从技术上讲,写入的文件仍然是有效的UTF-8编码文本文件。错误在于读取带有BOM的UTF-8。@Chris bugs.sun.com链接已断开。你有一个有效的吗?仍然对我有效;我没有登录或其他什么。尝试用谷歌搜索bug 4508058。这也会生成一个没有BOM的文件UTF-8。。。我不知道它是否相关。@Smarty,只有在您已经在使用apachecommons的情况下。否则,仅仅因为不想再写几个字符就包含另一个jar似乎是一种可怕的浪费。我检查了commons IO 1.4,如果您阅读了问题中显示的链接上的Java文档,那么它会告诉您引入写入API的commons IO API的版本。看起来写API是从v2.0开始引入的。我只想提到我使用了FileUtils.writeStringToFile(…)(带有commons-io-1.3.1.jar)方法,而不是FileUtils.write(…)。
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));
}
}
Path logFile = Paths.get("/tmp/example.txt");
try (BufferedWriter writer = Files.newBufferedWriter(logFile, StandardCharsets.UTF_8)) {
writer.write("Hello World!");
// ...
}
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();
}
}