From 1f0d68ee795660683b1160b7605614c572d759df Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Tue, 21 Jun 2011 18:56:44 -0400 Subject: [PATCH] utf-8-sig encoding for csv/tsv (for excel). Fixes #18. --- tablib/formats/_csv.py | 8 ++------ tablib/formats/_tsv.py | 13 ++++++------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/tablib/formats/_csv.py b/tablib/formats/_csv.py index 43da4ab..572d196 100644 --- a/tablib/formats/_csv.py +++ b/tablib/formats/_csv.py @@ -3,10 +3,6 @@ """ Tablib - CSV Support. """ - -import os - -import tablib from tablib.compat import is_py3, csv, StringIO @@ -14,7 +10,7 @@ title = 'csv' extentions = ('csv',) -DEFAULT_ENCODING = 'utf-8' +DEFAULT_ENCODING = 'utf-8-sig' @@ -53,7 +49,7 @@ def import_set(dset, in_stream, headers=True): def detect(stream): """Returns True if given stream is valid CSV.""" try: - rows = dialect = csv.Sniffer().sniff(stream) + csv.Sniffer().sniff(stream) return True except csv.Error: return False \ No newline at end of file diff --git a/tablib/formats/_tsv.py b/tablib/formats/_tsv.py index 54838b1..855dff4 100644 --- a/tablib/formats/_tsv.py +++ b/tablib/formats/_tsv.py @@ -3,9 +3,6 @@ """ Tablib - TSV (Tab Separated Values) Support. """ -import os - -import tablib from tablib.compat import is_py3, csv, StringIO @@ -13,16 +10,17 @@ from tablib.compat import is_py3, csv, StringIO title = 'tsv' extentions = ('tsv',) -DEFAULT_ENCODING = 'utf-8' +DEFAULT_ENCODING = 'utf-8-sig' def export_set(dataset): """Returns a TSV representation of Dataset.""" + stream = StringIO() if is_py3: - _tsv = csv.writer(stream, delimiter="\t") + _tsv = csv.writer(stream, delimiter='\t') else: - _tsv = csv.writer(stream, encoding=DEFAULT_ENCODING, delimiter="\t") + _tsv = csv.writer(stream, encoding=DEFAULT_ENCODING, delimiter='\t') for row in dataset._package(dicts=False): _tsv.writerow(row) @@ -32,6 +30,7 @@ def export_set(dataset): def import_set(dset, in_stream, headers=True): """Returns dataset from TSV stream.""" + dset.wipe() if is_py3: @@ -54,7 +53,7 @@ def import_set(dset, in_stream, headers=True): def detect(stream): """Returns True if given stream is valid TSV.""" try: - rows = dialect = csv.Sniffer().sniff(stream, delimiters='\t') + csv.Sniffer().sniff(stream, delimiters='\t') return True except csv.Error: return False