Is possible to change the Blob charset really? I'm trying it for hours but it doesn't workds. See this.
jQuery("#download").click(function() {
var csv_content = jQuery("#csv").val(),
download = document.createElement("a"),
blob = new Blob([csv_content], { type: "text/csv;charset=ISO-8859-1" });
download.href = window.URL.createObjectURL(blob);
download.download = "test.csv";
var event = document.createEvent("MouseEvents");
event.initMouseEvent(
"click", true, false, window, 0, 0, 0, 0, 0
, false, false, false, false, 0, null
);
download.dispatchEvent(event);
});
I need export a CSV to open on Excel, but it always is save with UTF-8 and Excel can't handle it.
In my case I was using Angular JS to receive an encoded CSV file from the server in response to an HTTP POST. The problem was that CSVs returned from XMLHttpRequests are represented as Unicode (I want to say UTF-8, but according to this it is UTF-16) strings, not pre-encoded binary data. It looks like this is true in your example too, it is reading the CSV from a DOM element? In this case it ends up being represented as Unicode in memory, so it doesn't matter what value you set the encoding metadata to, the data is still Unicode.
My Angular code was doing something like this:
Inside
handleResponse
, the data was already represented in Unicode. According to Angular's $http service, not providing theresponseType
property on the config object causes it to default tostring
. Which according to Mozilla ends up represented as a DOMString in UTF-16, whereas we actually want it to be a Blob. Setting theresponseType
toblob
on the config object successfully prevented the content from getting decoded. Without this, the response data was being inadvertently decoded before being placed into the Blob.I then used saveAs() to get the browser to provide the file contents to the user.
I got the idea to set
responseType
from https://stackoverflow.com/a/16791296/1225617I found the solution before to post.
The change of charset has not been resolved, in fact. However, I sent the UTF-8 header for the download process and Excel was able to understand the file format correctly. Thanks to this response of Erik Töyrä.
if you have some symbols in csv and accepted solution is not solving the problem.