gpt4 book ai didi

java - 如何在不更改其编码的情况下使用java上传文件

转载 作者:行者123 更新时间:2023-11-30 09:32:55 26 4
gpt4 key购买 nike

我有一个 Java 类,可以将文本文件从 Windows 客户端上传到 Linux 服务器。

我正在尝试上传的文件是使用 Cp1252 或 ISO-8859-1 编码的。

当文件上传后,它会使用 utf-8 进行编码,然后无法读取包含 éèà 等重音符号的字符串。

命令

file -i *

在 linux 服务器中告诉我它是使用 utf-8 编码的。

我认为编码在上传过程中发生了变化,所以我将这段代码添加到我的 servlet 中:

String currentEncoding=System.getProperty("file.encoding");
System.setProperty("file.encoding", "Cp1252");
item.write(file);
System.setProperty("file.encoding", currentEncoding);

在jsp文件中,我有这段代码:

<form name="formUpload"
action="..." method="post"
enctype="multipart/form-data" accept-charset="ISO-8859-1">

我用来上传文件的库是apache commun。

Doe 有谁知道吗,因为我真的没主意了!

谢谢,

奥特曼·马利赫

最佳答案

设置系统属性 file.encoding 仅在您启动 Java 时有效。相反,您必须使用以下代码打开文件:

public static BufferedWriter createWriter( File file, Charset charset ) throws IOException {
FileOutputStream stream = new FileOutputStream( file );
return new BufferedWriter( new OutputStreamWriter( stream, charset ) );
}

使用 Charset.forName("iso8859-1") 作为 charset 参数。

[EDIT] 您的问题很可能是 file 命令。 MacOS 是世界上唯一可以自信地告诉您文件编码的操作系统。 Windows和Linux不得不猜测一下。这个猜测可能是错误的。

因此您需要做的是使用指定编码的编辑器打开文件。您需要在 Windows 上执行此操作(以确保文件确实是使用 Cp1252 保存的;某些应用程序会忽略平台并始终以 UTF-8 保护其数据)。

并且您需要在 Linux 上执行相同的操作。如果你只是打开文件,编辑器将采用平台编码(在现代 Linux 系统上是 UTF-8)并尝试用它读取文件 -> ISO-8859-1 变音符号会出现乱码。但是如果你用ISO-8859-1打开文件,那么UTF-8就会出现乱码。这是确定文本文件真正编码的唯一方法。

关于java - 如何在不更改其编码的情况下使用java上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com