使用 windows-1252 读写文件
Read and write file with windows-1252
我正在尝试将包含一些德语字符的文件写入磁盘并使用 Windows-1252
编码读取它。我不明白为什么,但我的输出是这样的:
<title>W�hrend und im Anschluss an die Exkursion stehen Ihnen die Ansprechpartner f�r O-T�ne</title>
<p>Die Themen im �berblick</p>
有什么想法吗?
这是我的代码。你需要 spring-core 和 commons-io 才能 运行 它。
private static void write(String fileName, Charset charset) throws IOException {
String html = "<html xmlns=\"http://www.w3.org/1999/xhtml\">" +
"<head>" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1252\">" +
"<title>Während und im Anschluss an die Exkursion stehen Ihnen die Ansprechpartner für O-Töne</title>" +
"</head>" +
"<body>" +
"<p>Die Themen im Überblick</p>" +
"</body>" +
"</html>";
byte[] bytes = html.getBytes(charset);
FileOutputStream outputStream = new FileOutputStream(fileName);
OutputStreamWriter writer = new OutputStreamWriter(outputStream, charset);
IOUtils.write(bytes, writer);
writer.close();
outputStream.close();
}
private static void read(String file, Charset windowsCharset) throws IOException {
ClassPathResource pathResource = new ClassPathResource(file);
String string = IOUtils.toString(pathResource.getInputStream(), windowsCharset);
System.out.println(string);
}
public static void main(String[] args) throws IOException {
Charset windowsCharset = Charset.forName("windows-1252");
String file = "test.txt";
write(file, windowsCharset);
read(file, windowsCharset);
}
你的写法有误。您正在使用 writer 写入 bytes。写入字符或字符串应该使用writer。
您已经使用
行将字符串编码为字节
byte[] bytes = html.getBytes(charset);
这些字节可以简单地写入输出流:
IOUtils.write(bytes, outputStream);
这使得编写器不再需要(将其删除),您现在将获得正确的输出。
首先保证编译器和编辑器使用相同的编码。
这可以通过尝试(丑陋的)\uXXXX
转义来检查:
während
w\u00E4hrend
然后
"<meta http-equiv='Content-Type' content='text/html; charset="
+ charset.name() + "' />" +
byte[] bytes = html.getBytes(charset);
Files.write(Paths.get(fileName), bytes);
啊,检查文件是否也在 Windows-1252 中。 NotePad++ 或 JEdit 等程序员的编辑器允许使用编码。
我正在尝试将包含一些德语字符的文件写入磁盘并使用 Windows-1252
编码读取它。我不明白为什么,但我的输出是这样的:
<title>W�hrend und im Anschluss an die Exkursion stehen Ihnen die Ansprechpartner f�r O-T�ne</title>
<p>Die Themen im �berblick</p>
有什么想法吗? 这是我的代码。你需要 spring-core 和 commons-io 才能 运行 它。
private static void write(String fileName, Charset charset) throws IOException {
String html = "<html xmlns=\"http://www.w3.org/1999/xhtml\">" +
"<head>" +
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1252\">" +
"<title>Während und im Anschluss an die Exkursion stehen Ihnen die Ansprechpartner für O-Töne</title>" +
"</head>" +
"<body>" +
"<p>Die Themen im Überblick</p>" +
"</body>" +
"</html>";
byte[] bytes = html.getBytes(charset);
FileOutputStream outputStream = new FileOutputStream(fileName);
OutputStreamWriter writer = new OutputStreamWriter(outputStream, charset);
IOUtils.write(bytes, writer);
writer.close();
outputStream.close();
}
private static void read(String file, Charset windowsCharset) throws IOException {
ClassPathResource pathResource = new ClassPathResource(file);
String string = IOUtils.toString(pathResource.getInputStream(), windowsCharset);
System.out.println(string);
}
public static void main(String[] args) throws IOException {
Charset windowsCharset = Charset.forName("windows-1252");
String file = "test.txt";
write(file, windowsCharset);
read(file, windowsCharset);
}
你的写法有误。您正在使用 writer 写入 bytes。写入字符或字符串应该使用writer。
您已经使用
行将字符串编码为字节byte[] bytes = html.getBytes(charset);
这些字节可以简单地写入输出流:
IOUtils.write(bytes, outputStream);
这使得编写器不再需要(将其删除),您现在将获得正确的输出。
首先保证编译器和编辑器使用相同的编码。
这可以通过尝试(丑陋的)\uXXXX
转义来检查:
während
w\u00E4hrend
然后
"<meta http-equiv='Content-Type' content='text/html; charset="
+ charset.name() + "' />" +
byte[] bytes = html.getBytes(charset);
Files.write(Paths.get(fileName), bytes);
啊,检查文件是否也在 Windows-1252 中。 NotePad++ 或 JEdit 等程序员的编辑器允许使用编码。