【问题标题】:JavaScript Fetch download part of text file non-English character problemJavaScript Fetch 下载部分文本文件非英文字符问题
【发布时间】:2021-06-13 21:45:18
【问题描述】:

我正在尝试通过获取范围标头属性来下载部分文本文件。但是我从 fetch 中得到了损坏的字符。

这是我的文本文件的一部分:

Dalgalan sen de şafaklar gibi ey şanlı hilâl,
Olsun artık dökülen kanlarımın hepsi helâl;
Ebediyen sana yok, ırkıma yok izmihlâl:
Hakkıdır, hür yaşamış bayrağımın hürriyet;
Hakkıdır,Hakk'a tapan milletimin istiklâl!

我的 javascript 代码是:

fetch("https://website.com/images/text.txt", {
        headers: {
          'content-type': 'text/plain;charset=UTF-8',
            'range': 'bytes=17-202'
        },
    })
    .then(response => {
        if (response.ok) {
            return response.text();
        }
    })
    .then(response => {
        console.log(response);
    });

结果是:

�afaklar gibi ey şanlı hilâl;
Olsun artık dökülen kanlarımın hepsi helâl。
Ebediyen sana yok, ırkıma yok izmihlâl:
Hakkıdır, hür yaşamış bayrağımın hürriyet;
哈克德

如您所见,第一个字符是未知符号,问号,但它必须是 ş

我认为非英语字符有 2 个字节,因此它们被分成。怎么解决呢,谢谢 :)

【问题讨论】:

标签: javascript fetch


【解决方案1】:

Content-Type 标头不会影响获取的响应,它用于告诉浏览器和 URL 您正在发送什么。所以它适用于POST 请求。 (但在这里使用它并没有什么坏处)。

Accept 标头与Content-Type 完全相反,在发出GET 请求时应始终使用Accept 标头,因此您始终知道预期的数据类型。

虽然它们的用途不同,但它们的价值是相同的。因此,您应该将Accept 标头设置为text/plain;charset=UTF-8 值以及您选择的其他headers。像这样

fetch("https://website.com/images/text.txt").then(response => response.text()).then(...)

【讨论】:

  • 好吧...你试过fetchingfile没有任何选项?就像在我编辑的答案中一样
  • 没有任何一个?
  • 是的,当我在没有标题的情况下运行 fetch 时,我下载的所有文件都没有错误。
  • 是的,我得到了原文,原文。
猜你喜欢
  • 2014-04-03
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
相关资源
最近更新 更多