2015-01-06 1 views
0

У меня есть страница, которая функционирует как когнитивный тест для исследования, которое я делаю.UTF-8 csv encoding

JS-файл выводит CSV-файл с подробными результатами тестов.

Часть текста на иврите, а CSV показывает тарабарщину в Excel.

Я попробовал следующий метод:

var csvContent = "data:text/csv;charset=utf-8,"; 

Но я получаю тот же результат:

׳©׳—׳•׳¨ ׳¡׳’׳•׳ gray 
׳©׳—׳•׳¨ ׳™׳¨׳•׳§ yellow 
׳©׳—׳•׳¨ ׳׳“׳•׳ pink 
׳׳₪׳•׳¨ ׳׳₪׳•׳¨ purple 
׳™׳¨׳•׳§ ׳›׳×׳•׳ #FE642E 
׳™׳¨׳•׳§ ׳¦׳”׳•׳‘ red 
׳׳₪׳•׳¨ ׳©׳—׳•׳¨ pink 
׳׳₪׳•׳¨ ׳›׳×׳•׳ gray 
׳™׳¨׳•׳§ ׳¦׳”׳•׳‘ purple 
׳׳“׳•׳ ׳׳₪׳•׳¨ pink 

Что я делаю неправильно?

+0

Можете ли вы добавить свою html-разметку на скрипку? –

+0

Обновлена ​​ссылка JSfiddle :) – TonalDev

+1

Что потребляет содержимое CSV в создаваемом вами окне? Является ли браузер просто попыткой показать CSV в виде текста или запускает какую-либо другую программу (Excel или что-то еще)? – Pointy

ответ

2

Excel не распознает автоматическое кодирование документов UTF-8. Для этого вам нужно добавить спецификацию UTF-8 («\ uefbbbf») до самого начала файла.

Вы также можете проверить кодировку файла csv с помощью Notepad ++ перед открытием в Excel. Без спецификации, Notepad ++ должен отмечать тип как «UTF-8 без спецификации». С помощью спецификации он отобразит «UTF-8».

2

Как указал Alastair, вам нужно будет иметь спецификацию в начале файла, если вы хотите, чтобы excel правильно себя вел. Но я считаю, что это должно быть указано иначе. Вот полный рабочий пример того, как загрузить (уже закодированы) а CSV-файл, который был построен в браузере:

// not needed with firefox, chrome, ie11: 
// window.URL = window.URL || window.webkitURL; 

var data = "a,column b,c\nНикола Тесла,234,365"; 

// add UTF-8 BOM to beginning so excel doesn't get confused. 
// *THIS IS THE KEY* 
var BOM = String.fromCharCode(0xFEFF); 
data = BOM + data; 

var btn = document.createElement("button"); 
btn.appendChild(document.createTextNode("Click Me!")); 
btn.onclick = function() { 
    var blob = new Blob([data], {type: "text/csv;charset=UTF-8"}); 
    if (window.navigator && window.navigator.msSaveOrOpenBlob) { 

    // ie 
    var success = window.navigator.msSaveOrOpenBlob(blob, "Name of File.csv"); 
    if (!success) { 
     alert("Failed"); 
    } 
    } else { 

    // not ie 
    var a = document.createElement("a"); 
    a.href = window.URL.createObjectURL(blob); 
    a.download = "Name of File.csv"; 
    document.body.appendChild(a); 
    a.click(); 

    // is there a problem with removing this from the DOM already? 
    a.parentNode.removeChild(a); 
    } 
}; 
document.body.appendChild(btn); 

Вышеуказанные работы в текущем Firefox, Chrome и IE11 - если вы открываете с первенствует, вы увидите имя Никола Теслы на сербской кириллице.

1

Единственное, что нужно сделать, это добавить «\ ufeff» в начале вашей Csv строки:

var csv = "\ufeff"+CSV; 

же ответ здесь: same answer

Я нашел решение здесь : similar problem and solution

Я разместил их здесь на всякий случай, если вы ищете решение.