2013-07-25 3 views
0

Я использую glob.glob для получения списка файлов из ввода каталога. При попытке открыть указанные файлы, Python борется меня с этой ошибкой:Ошибка кодировки unicode Python 3

UnicodeEncodeError: 'charmap' codec can't encode character '\xf8' in position 18: character maps to < undefined >

Определяя переменную строку первой, я могу это сделать:

filePath = r"C:\Users\Jørgen\Tables\\" 

Есть ли какой-нибудь способ, чтобы получить «г 'кодировка для переменной?

EDIT:

import glob 

di = r"C:\Users\Jørgen\Tables\\" 

def main(): 
    fileList = getAllFileURLsInDirectory(di) 
    print(fileList) 

def getAllFileURLsInDirectory(directory): 
    return glob.glob(directory + '*.xls*') 

Существует много больше кода, но эта проблема останавливает процесс.

+2

Существует * нет * 'r' кодировка. Вы определяете строковый литерал, сохраняя при этом слишком много обратных косых черт. Ваша кодировка файлов позаботилась о 'ø', поэтому вы определили значение * unicode *. –

+1

'' C: \\ Users \\ Jørgen \\ Таблицы \\ "' * * также * работает. Ваш редактор сохранил это как UTF-8, используемая по умолчанию кодировка Python используется при интерпретации исходного кода. –

+0

Пожалуйста, покажите нам свой код, который производит эту ошибку. –

ответ

2

Независимо от того, используете ли вы строковый литерал или обычный строковый литерал, интерпретатор Python должен знать кодировку исходного кода. Кажется, вы используете 8-битную кодировку, а не UTF-8. Поэтому вы должны добавить строку как

# -*- coding: cp1252 -*- 

в начале файла (или с использованием другой кодировки, используемой для исходных файлов). Это не должна быть первая строка, но она обычно является первой или второй (первая должна содержать #!python3 для скрипта, используемого в Windows).

В любом случае, обычно лучше не использовать символы ASCII в именах файлов/каталогов.

Вы также можете использовать обычные косые черты в пути (так же, как в системах на базе Unix). Кроме того, посмотрите на os.path.join, когда вам нужно составить пути.

Обновлено

Проблема, вероятно, не там, где вы будете искать его. Я предполагаю, что ошибка проявляется только тогда, когда вы хотите отобразить полученный список через print. Обычно это происходит потому, что консоль по умолчанию использует кодировку, отличную от юникода, которая не способна отображать символ. Попробуйте команду chcp без аргументов в вашем окне cmd.

Вы можете изменить команду печати в вашей main() функции для преобразования строкового представления в ASCII один, который всегда может быть отображено:

print(ascii(fileList)) 
+0

Я бы предпочел использовать символы не ASCII, такие как 'æ',' ø' и 'å'. Целью является ввод пути к папке и управление каждым файлом определенного типа в этой папке. Чтобы это работало с другими пользователями, я не могу гарантировать, что путь не будет содержать никаких «незаконных» символов. У меня было '# - * - кодирование: utf-8 - * -' сверху, но ни то, ни другое предложение «кодирования» не работало. – DoTheGenes

+0

OK. Это нормально, если это не под вашим контролем. Но вы должны гарантировать, что в любом случае не существует никаких незаконных символов. Буквы в порядке, даже Unicode, если система поддерживает Unicode-пути. Используете ли вы Python 3 или Python 2? – pepr

+0

Я использую Python 3.3 – DoTheGenes

Смежные вопросы