2015-10-07 2 views
1

(Python 2.6)Безопасное Импорт модулей с Unicode имен в Python 2

У меня есть некоторый код, который делает некоторые настройки на основе имени клиента.

Это делает что-то вроде этого:

custom_module = __import__("some.module.company_inc")

это прекрасно работает до тех пор, как наши клиенты имеют ASCII-только имена.

Я хочу, чтобы этот код работал правильно для имен компаний, не относящихся к ascii, например,

custom_module = __import__(u"some.module.unicóde_company_inc")

Однако __import__ принимает только байт, так что мне нужно закодировать это первое.

Действительно ли __import__(u"some.module.unicóde_company_inc".encode(sys.getfilesystemencoding()) гарантированно работает на всех системах (при условии, что кодировка файловой системы поддерживает «-», конечно)? Правильно ли это? (Предполагая, что я не статически знаю кодировку, которую использует ящик)

Меня больше всего интересуют системы linux. (Но было бы неплохо также знать и для не-linux)

+0

По крайней мере, он работает на * вашей * системе? Всегда легче доказать отрицательный, чем положительный. –

+0

Конечно. :) Я просто не знаю, правильно ли это делается. – marky1991

ответ

1

Строго говоря, возможно, что sys.getfilesystemencoding() может в случае каких-либо обстоятельств вернуть None (например, если LANG не установлен). Так что, вероятно, будет немного безопаснее Откат к «UTF-8», чтобы для этого (весьма маловероятно) возможности:

encoding = sys.getfilesystemencoding() or 'utf-8' 

Это будет охватывать 99,9% случаев. В остальном я бы просто разрешил приложению создавать исключение (так как это именно то, что есть), а затем изящно выручить с соответствующим информативным сообщением об ошибке.

+0

Я прочитал это после того, как разместил вопрос. Я справимся с этим. Благодаря! – marky1991

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