diff --git a/CHANGELOG b/CHANGELOG index 9065299a38..fb079ef57c 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Always encode CSV export in UTF-8 * Use tempusdominus and Popper for date time picker * Support PYSON comparison of date and datetime * Customize bootstrap default style diff --git a/src/sao.js b/src/sao.js index 0df3b4f0e6..5035056496 100644 --- a/src/sao.js +++ b/src/sao.js @@ -336,6 +336,8 @@ var Sao = {}; }; Sao.i18n.locale = {}; + Sao.BOM_UTF8 = '\uFEFF'; + Sao.get_preferences = function() { var session = Sao.Session.current_session; return session.reload_context().then(function() { diff --git a/src/tab.js b/src/tab.js index d20b3b2530..5e33f9b0fa 100644 --- a/src/tab.js +++ b/src/tab.js @@ -1304,19 +1304,21 @@ return Sao.Window.Export.format_row(row); }); var delimiter = ','; - var encoding = 'utf-8'; if (navigator.platform && navigator.platform.slice(0, 3) == 'Win') { delimiter = ';'; - encoding = 'cp1252'; } var csv = Papa.unparse(unparse_obj, { quoteChar: '"', delimiter: delimiter, }); + if (navigator.platform && + navigator.platform.slice(0, 3) == 'Win') { + csv = Sao.BOM_UTF8 + csv; + } Sao.common.download_file( csv, export_.name + '.csv', - {'type': 'text/csv;charset=' + encoding}); + {'type': 'text/csv;charset=utf-8'}); }); }.bind(this)); }, diff --git a/src/window.js b/src/window.js index 4a832ce25e..0d8edcaab1 100644 --- a/src/window.js +++ b/src/window.js @@ -3,6 +3,53 @@ (function() { 'use strict'; + var ENCODINGS = ["866", "ansi_x3.4-1968", "arabic", "ascii", + "asmo-708", "big5", "big5-hkscs", "chinese", "cn-big5", "cp1250", + "cp1251", "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", + "cp1257", "cp1258", "cp819", "cp866", "csbig5", "cseuckr", + "cseucpkdfmtjapanese", "csgb2312", "csibm866", "csiso2022jp", + "csiso2022kr", "csiso58gb231280", "csiso88596e", "csiso88596i", + "csiso88598e", "csiso88598i", "csisolatin1", "csisolatin2", + "csisolatin3", "csisolatin4", "csisolatin5", "csisolatin6", + "csisolatin9", "csisolatinarabic", "csisolatincyrillic", + "csisolatingreek", "csisolatinhebrew", "cskoi8r", "csksc56011987", + "csmacintosh", "csshiftjis", "cyrillic", "dos-874", "ecma-114", + "ecma-118", "elot_928", "euc-jp", "euc-kr", "gb18030", "gb2312", + "gb_2312", "gb_2312-80", "gbk", "greek", "greek8", "hebrew", + "hz-gb-2312", "ibm819", "ibm866", "iso-2022-cn", "iso-2022-cn-ext", + "iso-2022-jp", "iso-2022-kr", "iso-8859-1", "iso-8859-10", + "iso-8859-11", "iso-8859-13", "iso-8859-14", "iso-8859-15", + "iso-8859-16", "iso-8859-2", "iso-8859-3", "iso-8859-4", + "iso-8859-5", "iso-8859-6", "iso-8859-6-e", "iso-8859-6-i", + "iso-8859-7", "iso-8859-8", "iso-8859-8-e", "iso-8859-8-i", + "iso-8859-9", "iso-ir-100", "iso-ir-101", "iso-ir-109", + "iso-ir-110", "iso-ir-126", "iso-ir-127", "iso-ir-138", + "iso-ir-144", "iso-ir-148", "iso-ir-149", "iso-ir-157", "iso-ir-58", + "iso8859-1", "iso8859-10", "iso8859-11", "iso8859-13", "iso8859-14", + "iso8859-15", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5", + "iso8859-6", "iso8859-7", "iso8859-8", "iso8859-9", "iso88591", + "iso885910", "iso885911", "iso885913", "iso885914", "iso885915", + "iso88592", "iso88593", "iso88594", "iso88595", "iso88596", + "iso88597", "iso88598", "iso88599", "iso_8859-1", "iso_8859-15", + "iso_8859-1:1987", "iso_8859-2", "iso_8859-2:1987", "iso_8859-3", + "iso_8859-3:1988", "iso_8859-4", "iso_8859-4:1988", "iso_8859-5", + "iso_8859-5:1988", "iso_8859-6", "iso_8859-6:1987", "iso_8859-7", + "iso_8859-7:1987", "iso_8859-8", "iso_8859-8:1988", "iso_8859-9", + "iso_8859-9:1989", "koi", "koi8", "koi8-r", "koi8-ru", "koi8-u", + "koi8_r", "korean", "ks_c_5601-1987", "ks_c_5601-1989", "ksc5601", + "ksc_5601", "l1", "l2", "l3", "l4", "l5", "l6", "l9", "latin1", + "latin2", "latin3", "latin4", "latin5", "latin6", "logical", "mac", + "macintosh", "ms932", "ms_kanji", "shift-jis", "shift_jis", "sjis", + "sun_eu_greek", "tis-620", "unicode-1-1-utf-8", "us-ascii", + "utf-16", "utf-16be", "utf-16le", "utf-8", "utf8", "visual", + "windows-1250", "windows-1251", "windows-1252", "windows-1253", + "windows-1254", "windows-1255", "windows-1256", "windows-1257", + "windows-1258", "windows-31j", "windows-874", "windows-949", + "x-cp1250", "x-cp1251", "x-cp1252", "x-cp1253", "x-cp1254", + "x-cp1255", "x-cp1256", "x-cp1257", "x-cp1258", "x-euc-jp", "x-gbk", + "x-mac-cyrillic", "x-mac-roman", "x-mac-ukrainian", "x-sjis", + "x-user-defined", "x-x-big5"]; + Sao.Window = {}; Sao.Window.InfoBar = Sao.class_(Object, { @@ -860,52 +907,6 @@ Sao.Window.CSV = Sao.class_(Object, { init: function(title) { - this.encodings = ["866", "ansi_x3.4-1968", "arabic", "ascii", - "asmo-708", "big5", "big5-hkscs", "chinese", "cn-big5", "cp1250", - "cp1251", "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", - "cp1257", "cp1258", "cp819", "cp866", "csbig5", "cseuckr", - "cseucpkdfmtjapanese", "csgb2312", "csibm866", "csiso2022jp", - "csiso2022kr", "csiso58gb231280", "csiso88596e", "csiso88596i", - "csiso88598e", "csiso88598i", "csisolatin1", "csisolatin2", - "csisolatin3", "csisolatin4", "csisolatin5", "csisolatin6", - "csisolatin9", "csisolatinarabic", "csisolatincyrillic", - "csisolatingreek", "csisolatinhebrew", "cskoi8r", "csksc56011987", - "csmacintosh", "csshiftjis", "cyrillic", "dos-874", "ecma-114", - "ecma-118", "elot_928", "euc-jp", "euc-kr", "gb18030", "gb2312", - "gb_2312", "gb_2312-80", "gbk", "greek", "greek8", "hebrew", - "hz-gb-2312", "ibm819", "ibm866", "iso-2022-cn", "iso-2022-cn-ext", - "iso-2022-jp", "iso-2022-kr", "iso-8859-1", "iso-8859-10", - "iso-8859-11", "iso-8859-13", "iso-8859-14", "iso-8859-15", - "iso-8859-16", "iso-8859-2", "iso-8859-3", "iso-8859-4", - "iso-8859-5", "iso-8859-6", "iso-8859-6-e", "iso-8859-6-i", - "iso-8859-7", "iso-8859-8", "iso-8859-8-e", "iso-8859-8-i", - "iso-8859-9", "iso-ir-100", "iso-ir-101", "iso-ir-109", - "iso-ir-110", "iso-ir-126", "iso-ir-127", "iso-ir-138", - "iso-ir-144", "iso-ir-148", "iso-ir-149", "iso-ir-157", "iso-ir-58", - "iso8859-1", "iso8859-10", "iso8859-11", "iso8859-13", "iso8859-14", - "iso8859-15", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5", - "iso8859-6", "iso8859-7", "iso8859-8", "iso8859-9", "iso88591", - "iso885910", "iso885911", "iso885913", "iso885914", "iso885915", - "iso88592", "iso88593", "iso88594", "iso88595", "iso88596", - "iso88597", "iso88598", "iso88599", "iso_8859-1", "iso_8859-15", - "iso_8859-1:1987", "iso_8859-2", "iso_8859-2:1987", "iso_8859-3", - "iso_8859-3:1988", "iso_8859-4", "iso_8859-4:1988", "iso_8859-5", - "iso_8859-5:1988", "iso_8859-6", "iso_8859-6:1987", "iso_8859-7", - "iso_8859-7:1987", "iso_8859-8", "iso_8859-8:1988", "iso_8859-9", - "iso_8859-9:1989", "koi", "koi8", "koi8-r", "koi8-ru", "koi8-u", - "koi8_r", "korean", "ks_c_5601-1987", "ks_c_5601-1989", "ksc5601", - "ksc_5601", "l1", "l2", "l3", "l4", "l5", "l6", "l9", "latin1", - "latin2", "latin3", "latin4", "latin5", "latin6", "logical", "mac", - "macintosh", "ms932", "ms_kanji", "shift-jis", "shift_jis", "sjis", - "sun_eu_greek", "tis-620", "unicode-1-1-utf-8", "us-ascii", - "utf-16", "utf-16be", "utf-16le", "utf-8", "utf8", "visual", - "windows-1250", "windows-1251", "windows-1252", "windows-1253", - "windows-1254", "windows-1255", "windows-1256", "windows-1257", - "windows-1258", "windows-31j", "windows-874", "windows-949", - "x-cp1250", "x-cp1251", "x-cp1252", "x-cp1253", "x-cp1254", - "x-cp1255", "x-cp1256", "x-cp1257", "x-cp1258", "x-euc-jp", "x-gbk", - "x-mac-cyrillic", "x-mac-roman", "x-mac-ukrainian", "x-sjis", - "x-user-defined", "x-x-big5"]; this.dialog = new Sao.Dialog(title, 'csv', 'lg'); this.el = this.dialog.modal; @@ -1078,38 +1079,6 @@ .appendTo(this.expander_csv); this.expander_csv.append(' '); - var encoding_label = jQuery('