小编Max*_*fer的帖子

在浏览器下载中保留 UTF-8 BOM

我有一个 JAX-RS REST-Service,它生成一个 CSV 文件并将其流回浏览器。一切都设置为 UTF-8,所以我通过浏览器下载的文件也是一个有效的 UTF-8 文件(没有 BOM),它在 Notepad++、Sublime 等中向我显示有效、可读的 UTF-8 变音等。

虽然在 Excel 中打开这样的文件会导致不可读的变音等,因为 Excel 显然试图用另一个字符集打开它(CP-1252,我猜,但这并不重要)。

通过 Notepad++ 使用 BOM 保存文件并在 Excel 中重新打开它效果很好。似乎 BOM 的检测是 Excel 用来检测 UTF-8 的唯一方法。无论如何 - 我认为添加 BOM 可以帮助......

做过某事。结果一样。过了一会儿,我发现在某些情况下 BOM 会被删除:如果我在 BOM 之前添加任何字符,我可以在我的十六进制编辑器中看到 BOM。删除该字符后,BOM 将不再存在。

当我继续通过 cURL 下载文件时,我真的很惊讶。BOM 就在那里!在那之前,我认为这可能与我的应用程序、内容类型、编码、HTTP 标头等有关 - 但它们似乎都很好。

现在,经过数小时的尝试不同的东西,关于如何告诉浏览器保留 BOM 的任何想法?我可以设置任何 HTTP 标头吗?由于 Chrome、Internet Explorer、Edge、Firefox 都删除了 BOM,这对我来说听起来有点像浏览器约定......

非常感谢您的大力帮助!

编辑:感谢 sideshowbarker 的回答,我找到了一种解决方法,即在内容之前添加两个 BOM,因此在浏览器删除第一个 BOM 后,将剩余一个 BOM。

browser curl byte-order-mark jax-rs utf-8

8
推荐指数
1
解决办法
1685
查看次数

使用角度反应形式上传多个文件

我正在尝试在Angular 6中构建一个表单,它提供了一个文件选择框,允许用户选择多个文件(Stackblitz:https://stackblitz.com/edit/angular-yjummp ).

模板看起来像:

<form [formGroup]="form">
    <input id="files" formControlName="files" type="file" accept="image/*,video/*" multiple (change)="onFilesChanged($event)"/>
</form>
Run Code Online (Sandbox Code Playgroud)

我在TypeScript中构建表单,如下所示:

  public form = new FormGroup({
    files: new FormControl('')
  });

  public onFilesChanged(event: any): void {
    console.log(event.target.files);
    console.log(this.form.value);
  }
Run Code Online (Sandbox Code Playgroud)

现在,在onFilesChangedHandler中,通过访问event.target.files(显然)可以从事件中正确检索所选文件,但打印表单值只打印一个文件.我一直在尝试使用多种方式FormArray,但到目前为止还没有运气.

有任何想法吗?非常感谢!

file-upload angular

6
推荐指数
1
解决办法
2340
查看次数

标签 统计

angular ×1

browser ×1

byte-order-mark ×1

curl ×1

file-upload ×1

jax-rs ×1

utf-8 ×1