From a1bbc2f3f579679a9546b59090e7ea419788a2f0 Mon Sep 17 00:00:00 2001 From: Arthur Wiedmer Date: Tue, 11 Aug 2015 10:56:54 -0700 Subject: [PATCH] add helper function for unicode delimiter and quotechar --- unicodecsv/py2.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/unicodecsv/py2.py b/unicodecsv/py2.py index 28ab676..053ea33 100644 --- a/unicodecsv/py2.py +++ b/unicodecsv/py2.py @@ -51,6 +51,13 @@ def _stringify_list(l, encoding, errors='strict'): raise csv.Error(str(e)) +def _encode_kwds(kwds, encoding, errors='strict'): + for k, v in kwds.items(): + if k in ('delimiter', 'quotechar') and isinstance(v, unicode): + kwds[k] = v.encode(encoding, errors) + return kwds + + def _unicodify(s, encoding): if s is None: return None @@ -79,8 +86,9 @@ class UnicodeWriter(object): def __init__(self, f, dialect=csv.excel, encoding='utf-8', errors='strict', *args, **kwds): self.encoding = encoding - self.writer = csv.writer(f, dialect, *args, **kwds) self.encoding_errors = errors + kwds = _encode_kwds(kwds, encoding, errors) + self.writer = csv.writer(f, dialect, *args, **kwds) def writerow(self, row): return self.writer.writerow( @@ -108,6 +116,7 @@ def __init__(self, f, dialect=None, encoding='utf-8', errors='strict', if not any([kwd_name in format_params for kwd_name in kwds.keys()]): dialect = csv.excel + kwds = _encode_kwds(kwds, encoding, errors) self.reader = csv.reader(f, dialect, **kwds) self.encoding = encoding self.encoding_errors = errors @@ -162,6 +171,7 @@ def __init__(self, csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', encoding='utf-8', errors='strict', *args, **kwds): self.encoding = encoding + kwds = _encode_kwds(kwds, encoding, errors) csv.DictWriter.__init__(self, csvfile, fieldnames, restval, extrasaction, dialect, *args, **kwds) self.writer = UnicodeWriter(csvfile, dialect, encoding=encoding, @@ -195,6 +205,7 @@ def __init__(self, csvfile, fieldnames=None, restkey=None, restval=None, **kwds): if fieldnames is not None: fieldnames = _stringify_list(fieldnames, encoding) + kwds = _encode_kwds(kwds, encoding, errors) csv.DictReader.__init__(self, csvfile, fieldnames, restkey, restval, dialect, *args, **kwds) self.reader = UnicodeReader(csvfile, dialect, encoding=encoding,