HTML文件上传中的字符编码

ast*_*iak 8 html forms file-upload utf-8 character-encoding

我有一个简单的HTML表单:

<form action="/file/import" method="POST" enctype="multipart/form-data">
  <input id="csvFile" type="file" name="file">
</form>
Run Code Online (Sandbox Code Playgroud)

我在上传使用不同字符集保存的CSV文件时遇到问题.是否有可能使浏览器将任何文件转换为UTF-8并以这种方式发送到服务器?

在上传最初保存在ISO-8859-2中的文件后,我尝试了几个选项并跟踪浏览器使用ngrep发送的数据:

  1. 设置enctypemultipart/form-data; charset=utf-8- >由于某种原因导致浏览器发送Content-Type: application/x-www-form-urlencoded- 就像它无法使用我指定的enctype.

  2. 添加form标签属性:accept-charset="UTF-8"- >无效.

  3. 使用<meta charset="UTF-8">in <head>- >无效.

我认为文件上传应该像这样工作.我不希望我的服务器关心不同的编码,而是以标准方式接收数据.但如果不可能,我可以以某种方式从浏览器向服务器发送有关编码的信息吗?我很感激任何建议,谢谢.

小智 3

您必须区分内容(字节)和编码(字节的解释)。html 文件上传功能只传输字节,不关心解释,因为它不仅限于文本文件,还可以传输二进制文件。由于您的服务器接收字节,因此它必须处理解释。

enctype=multipart/form-data; charset=utf-8只需添加有关字符集的标头信息,以便您的服务器可以处理此问题。它在上传文件之前或之后不会触发任何转换。