From 45e635cfccd69459f5fe5014c70427531b59802b Mon Sep 17 00:00:00 2001 From: Ed Page Date: Fri, 8 Apr 2011 06:42:38 -0500 Subject: [PATCH] Fixing a unicode problem for CSV --- src/backends/file_backend.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/backends/file_backend.py b/src/backends/file_backend.py index 9011225..9f8927a 100644 --- a/src/backends/file_backend.py +++ b/src/backends/file_backend.py @@ -21,11 +21,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Filesystem backend for contact support """ +from __future__ import with_statement import os import csv +def try_unicode(s): + try: + return s.decode("UTF-8") + except UnicodeDecodeError: + return s + + class CsvAddressBook(object): """ Currently supported file format @@ -63,11 +71,12 @@ class CsvAddressBook(object): def _read_csv(self, csvPath): try: - csvReader = iter(csv.reader(open(csvPath, "rU"))) + f = open(csvPath, "rU") + csvReader = iter(csv.reader(f)) except IOError, e: - if e.errno != 2: - raise - return + if e.errno == 2: + return + raise header = csvReader.next() nameColumns, nameFallbacks, phoneColumns = self._guess_columns(header) @@ -80,7 +89,7 @@ class CsvAddressBook(object): if len(row[phoneColumn]) == 0: continue contactDetails.append({ - "phoneType": phoneType, + "phoneType": try_unicode(phoneType), "phoneNumber": row[phoneColumn], }) except IndexError: @@ -96,6 +105,7 @@ class CsvAddressBook(object): break else: fullName = "Unknown" + fullName = try_unicode(fullName) yield str(yieldCount), { "contactId": "%s-%d" % (self._name, yieldCount), "name": fullName, -- 1.7.9.5