iT邦幫忙

0

JS 下載txt 檔案型態問題

您好:
有網路上看到 有可以利用JS 下載檔案方式,
下在後,要印出來
但因為下載的是UTF-8 檔--->印出亂碼
我將檔案另存ANSI --> 可正常印出

請問,是否有辦法將 下在時的檔案,規範成ANSI 呢?
因為已經試過很多種方式了?
謝謝!

[dataY] 是 已經串好的字串

  let fileName = "XXX.txt";   
          
           
            //let blob = new Blob([dataY], { type: "application/octet-stream" });
            let blob = new Blob([dataY], { type: 'text/csv;charset=utf-8;' });

            var href = URL.createObjectURL(blob);
            var link = document.createElement("a");

            //link.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(blob));
            link.setAttribute('href', 'data:text/csv;charset=base64,' + encodeURIComponent(blob));

            document.body.appendChild(link);
            link.href = href;
             link.download = fileName;  
             link.click(); 
看更多先前的討論...收起先前的討論...
noway iT邦新手 5 級 ‧ 2020-06-22 10:06:08 檢舉
您好:
最後有一段 new Blob(['\uFEFF'+dataX],
雖然不是 ANSI,但也能正常了
謝謝
froce iT邦大師 1 級 ‧ 2020-06-22 11:30:33 檢舉
因為windows判別UTF-8的方式是加一個特定檔頭。
所以得加\uFEFF。

不過到其他的OS,你加了就換其他OS出問題,建議判別是ie或是windows再加。

另外原來href 可以設定成 data:text/csv;charset=base64?
我以為是data:text/csv;base64
淺水員 iT邦研究生 3 級 ‧ 2020-06-22 15:38:55 檢舉
應該是後面又寫
link.href = href;
所以蓋過去了
data:text/csv;charset=base64 那行應該是多餘的
noway iT邦新手 5 級 ‧ 2020-06-22 16:20:22 檢舉
您好:
沒有 link.href = href; 就無檔案下載??
noway iT邦新手 5 級 ‧ 2020-06-22 16:23:00 檢舉
需求是 每次下載,都覆蓋掉舊檔。保持檔名相同。
fillano iT邦超人 1 級 ‧ 2020-06-23 16:36:54 檢舉
link.setAttribute(...)都拿掉,你只需要link.href跟link.download。

另外,能不能覆蓋舊檔,不是只有下載的檔名相同就好,你要看瀏覽器是否會自動改名字XD

1 個回答

2
浩瀚星空
iT邦超人 1 級 ‧ 2020-06-22 09:52:08

JS做的動作很有限。
基本上這如果不靠後端語言的話.

很難達到你要的效果。

noway iT邦新手 5 級 ‧ 2020-06-22 12:24:41 檢舉

您好,謝謝!
另外,請問, 下載的檔案,有辦法 直接覆蓋原檔案, 我想下載的檔名相同!

我要發表回答

立即登入回答