String[] parts = "hello@example.com".Split(new[]{ '@' });
String username = parts[0]; // "hello"
String domain = parts[1]; // "example.com"
Метод .encode
применяется к строке Unicode для создания байтовой строки; но вместо этого вы вызываете его в байтовой строке ... неправильно! Посмотрите на модуль codecs
в стандартной библиотеке и на codecs.open
, в частности, на лучшие общие решения для чтения текстовых файлов в кодировке UTF-8. Однако для модуля csv
, в частности, вам необходимо передать данные utf-8, и это то, что вы уже получаете, поэтому ваш код может быть намного проще:
import csv
def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
for row in csv_reader:
yield [unicode(cell, 'utf-8') for cell in row]
filename = 'da.csv'
reader = unicode_csv_reader(open(filename))
for field1, field2, field3 in reader:
print field1, field2, field3
PS: если он окажется что ваши входные данные НЕ в utf-8, но, например, в ISO-8859-1, тогда вам нужно «перекодирование» (если вы хотите использовать utf-8 в модуле csv
level) в форме line.decode ('anyweirdcodec'). encode ('utf-8'
Глядя на таблицу юникода Latin-1
, я вижу код символа 00E9
« СТРОЧНАЯ ЛАТИНСКАЯ БУКВА E С ОСТРЫМ ". Это символ с ударением в ваших данных выборки. Простой тест в Python
показывает, что кодировка UTF-8
для этого символа отличается от кодировки Unicode (почти UTF-16
).
>>> u'\u00e9'
u'\xe9'
>>> u'\u00e9'.encode('utf-8')
'\xc3\xa9'
>>>
Я предлагаю вы пытаетесь кодировать ("UTF-8")
данные Unicode перед вызовом специального unicode_csv_reader ()
.
Простое чтение данных из файла может скрыть кодировку, поэтому проверьте фактические значения символов.
Ссылка на страницу справки такая же для python 2.6 и как Насколько я знаю, с версии 2.5 не было никаких изменений в модуле csv (кроме исправлений ошибок). Вот код, который работает без кодирования / декодирования (файл da.csv содержит те же данные, что и переменная data ). Я предполагаю, что ваш файл должен читаться правильно без каких-либо преобразований.
test.py:
## -*- coding: utf-8 -*-
#
# NOTE: this first line is important for the version b) read from a string(unicode) variable
#
import csv
data = \
"""0665000FS10120684,SD1200IS,Appareil photo numérique PowerShot de 10 Mpx de Canon avec trépied (SD1200IS) - Bleu
0665000FS10120689,SD1200IS,Appareil photo numérique PowerShot de 10 Mpx de Canon avec trépied (SD1200IS) - Gris
0665000FS10120687,SD1200IS,Appareil photo numérique PowerShot de 10 Mpx de Canon avec trépied (SD1200IS) - Vert"""
# a) read from a file
print 'reading from a file:'
for (f1, f2, f3) in csv.reader(open('da.csv'), dialect=csv.excel):
print (f1, f2, f3)
# b) read from a string(unicode) variable
print 'reading from a list of strings:'
reader = csv.reader(data.split('\n'), dialect=csv.excel)
for (f1, f2, f3) in reader:
print (f1, f2, f3)
da.csv:
0665000FS10120684,SD1200IS,Appareil photo numérique PowerShot de 10 Mpx de Canon avec trépied (SD1200IS) - Bleu
0665000FS10120689,SD1200IS,Appareil photo numérique PowerShot de 10 Mpx de Canon avec trépied (SD1200IS) - Gris
0665000FS10120687,SD1200IS,Appareil photo numérique PowerShot de 10 Mpx de Canon avec trépied (SD1200IS) - Vert