UDK: Speichern einer CSV-Datei (utf-8) nach "text/csv;charset=iso-8859-15"

Beitrag lesen

Hallo Rolf,

dein Hinweis auf jsfiddle hat mich auf den richtigen Weg gebracht.

// zur ganzen Darstellung der Lösung gehört auch das 
// Einlesen der CSV-Dateien
		   Connects.inputLoadCSV = {
			 event: function(elem) {
			   const file = elem.files[0];
			   const textType = 
            /(text\/csv)|(application\/vnd[.]ms-excel)/;

			   if (file !== undefined && file.type.match(textType)) {
				 const reader = new FileReader();
				 reader.onload =
				   /**
					  *
					  * @param {type} elem
					  */
				   function(elem) {
				   var byteBuff = reader.result;
				   var dataViewer = new DataView(byteBuff);
				   var charArr = [];
				   for(let i = 0; i < dataViewer.byteLength; i++) {
					 charArr.push(dataViewer.getUint8(i));
				   }
				   var csvText = String.fromCharCode(...charArr);
				   var csvArray = CSV.toArray(csvText);
				   HtmlTable.create(csvArray);
				 };
				 reader.readAsArrayBuffer(file);
			   }
			   if (file !== undefined) {
				 this.fileName.elem.textContent = file.name || '. . .';
			   }
			 }
		   };

		   Connects.btnSaveCSV = {
			 event: function(elem) {
			   var csvString = CSV.toStr(HtmlTable.TableToArray());
			   let charArray = [];
			   for (let i = 0; i < csvString.length; i++ ) {
				 charArray.push(csvString.codePointAt(i));
			   }
			   let bytes = Uint8Array.from(charArray);
			   let blob = new Blob([ bytes ], {
				 type: "text/csv;charset=iso-8859-15"
			   });
			   let url = window.URL.createObjectURL(blob);
			   saveData(url, "NewPOL.csv");
			 }
		   };

		   function saveData(url, fileName) {
			 var a = document.createElement("a");
			 document.body.appendChild(a);
			 a.style = "display: none";
			 a.href = url;
			 a.download = fileName;
			 a.click();
			 window.URL.revokeObjectURL(url);
			 document.body.removeChild(a);
		   }

Ich habe zu viele Umwege gemacht. Blob kann auch direkt ein Uint8Array verarbeiten, scheinbar wird dann die korrekte Codierung verwendet. Zu den Excel/Access-Versionen, die verhältnismäßig aktuell, es wird direkt eine csv-Datei erzeugt. Und bei meinen Tests verwende ich vorhandene Dateien und vergleiche die Originaldatei und erzeugte Datei.

Vielen Dank an alle die geantwortet haben. Vielleicht hilft meine Lösung weiter.

UDK